很抱歉如果标题混淆但我无法找到表达问题的方法。
我看到很多Objective-C示例代码,他们通常使用它:
Clazz *clazz = [[Clazz alloc] init];
self.clazz = clazz;
而不是:
self.clazz = [[Clazz alloc] init];
第一种方法是否比第二种方法有任何优势?
答案 0 :(得分:5)
如果这一切都没有优势,那就毫无优势。如果代码进一步使用clazz
,那么访问局部变量可以节省调用self.clazz
getter所需的纳秒,并且完全避免getter,如果getter做任何奇怪的事情就可以解决这个问题。
答案 1 :(得分:2)
这通常只是一种风格偏好。您可能希望在单独的行中声明Class *clazz = [[Clazz alloc] init];
,以便在实际将其分配给属性之前在其上调用方法或在类上设置属性,尤其是在您具有自定义的情况下该班的二传手。
例如:
@interface ThisIsAClass ()
@property (nonatomic, strong) Clazz *clazz;
@end
@implementation ThisIsAClass
- (instancetype) init {
if (self = [super init]) {
Clazz *clazz = [[Clazz alloc] init];
clazz.widgets = @[@"onesie", @"twosie"];
self.clazz = clazz;
}
return self;
}
- (void)clazz:(Clazz *)newClazz {
// Make sure we're assigning valid values to this property
NSAssert(newClazz.widgets.count > 0, @"Widgets count must be > 0!");
_clazz = newClazz;
}
@end