我知道这不一定仅适用于 @properties,但它们是最常见的用例。如果有一个例子:
@property (strong) NSObject *object;
...
@synthesize object = _object;
可以在声明它的类的init
方法中进行初始化,如下所示:
- (id)init {
self = [super init];
if (self) {
_object = [[NSObject alloc] init];
}
}
或者覆盖getter,在第一次使用时进行初始化:
- (NSObject *)object {
if (!_object) {
_object = [[NSObject alloc] init];
}
return _object;
}
哪种更好用?这是否取决于使用场景(例如,声明属性的对象是否有多个初始化程序,属性的类型、使用方式等)?
我认为覆盖getter的真正优势在于只有在需要时才分配属性,但缺点是第一次访问速度较慢。
另外一件事,在
init
方法中访问属性时,最好使用self.object
还是_object
?
if (self) {
。 - lnafziger