Objective-C首先创建对象然后分配给属性

时间:2016-01-12 04:21:53

标签: objective-c

很抱歉如果标题混淆但我无法找到表达问题的方法。

我看到很多Objective-C示例代码,他们通常使用它:

    Clazz *clazz = [[Clazz alloc] init];
    self.clazz = clazz;

而不是:

    self.clazz = [[Clazz alloc] init];

第一种方法是否比第二种方法有任何优势?

2 个答案:

答案 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