2

在引入 ARC 之前,当我想使用 init(或 initWith)为属性分配值时,我只使用了 retain(因为不想在 init 中使用属性设置器)。

// Pre ARC using retain
// @property (nonatomic, retain) DataModel *dataModel;
// @synthesize dataModel = _dataModel;

- (id)initWithDataModel:(id)newModel {
    self = [super init];
    if(self) {
        _dataModel = [newModel retain];
    }
    return self;
}

使用 ARC(同样不使用 setter)这是将 newModel 分配给 dataModel 属性的正确方法吗?我的猜测是编译器(使用 ARC)会看到该属性被定义为强并正确设置该属性。我很好奇这是否正确?

// Using ARC
// @property (nonatomic, strong) DataModel *dataModel;
// @synthesize dataModel = _dataModel;

- (id)initWithDataModel:(id)newModel {
    self = [super init];
    if(self) {
        _dataModel = newModel;
    }
    return self;
}
4

1 回答 1

0

Yes this works. It is already a synthesized property. You can use property accessors or the direct access ivar name that is synthesized.

于 2013-01-05T13:23:09.350 回答