通过私有属性

时间:2015-05-22 21:03:00

标签: objective-c initialization

我正在使用Big Nerd Ranch Guide学习Objective-C。 作者使用一个商店,控制器可以从中获取一些数据:

#import "BNRItemStore.h"
#import "BNRItem.h"

@interface BNRItemStore ()

@property(nonatomic) NSMutableArray *privateItems;

@end

@implementation BNRItemStore

+(instancetype)sharedStore {
    static BNRItemStore *sharedStore = nil;

    if (!sharedStore){
        sharedStore = [[BNRItemStore alloc] initPrivate];
    }
    return sharedStore;
}

-(instancetype)initPrivate {
    self = [super init];
    if (self) {
        _privateItems = [[NSMutableArray alloc] init];
    }
    return self;
}

我的问题是关于_privateItems = [[NSMutableArray alloc] init];行:我们为什么要初始化_privateItems而不是privateItems

问候。

1 个答案:

答案 0 :(得分:2)

privateItems是属性名称。每个属性后面都有一个变量,默认名称为_propertyName。在你的情况下它是_privateItems

大多数情况下,您可以使用该属性设置值,如下所示:self.privateItems = [[NSMutableArray alloc] init]。但是,您不应直接在init方法中设置属性,这就是作者将值直接设置为变量的原因。