您是否需要在类中分配和初始化属性?

时间:2014-09-27 19:51:16

标签: objective-c

因此,当我们想要使用类时,我们会执行类似

的操作
MyClass *exampleClass = [[MyClass alloc] init ];

我的问题是我们如何使用Classe的属性?如果一个类没有分配和初始化属性?

当我们分配/ init时,它会自动分配/初始化每个属性吗?

我的困惑发生了,因为我可以说我在A班。 假设我有一个NSMutableArray (strong) *myArray;

的属性

我想向它插入一个对象。首先,我必须检查它是否已分配并初始化,如果不是我必须这样做。

如果我尝试做类似

的事情
[_myArray insertObject.....] 
it won't do anything because its nill. 
I have to do something like, which i understand. 
if(!_myArray)
_myArray = [NSMutableArray alloc] init]; 

这是非常令人困惑的,因为我有一个属性的类,并且没有一个由我初始化。 但是当我使用该类的实例时,它们都可以在没有init / alloc属性的情况下工作。

3 个答案:

答案 0 :(得分:0)

必须使用[[TheClass alloc] init]或[TheClass new] @"",@ []等初始化对象。 原始属性(浮点数,整数,BOOL等)不需要初始化它们只需要设置为某个值。 如果您正在读取一个有效的对象属性,而该对象属性尚未在某处初始化,则您忽略了某些内容。

答案 1 :(得分:0)

调用[SomeClass alloc]后,结果是一个对象,所有实例变量都设置为0,nil,NO,NULL等。如果你想让你的实例变量包含其他任何东西,那么你必须在你的实现中实现它init方法。如果这些0,nil,NO,NULL值为Ok,那么您不需要进一步初始化。

答案 2 :(得分:-1)

除非初始化对象属性,否则它们将为零。这是init方法的主要目的。另一种常见模式是在getter中创建延迟初始化,所以:

要么...

- (id)init {
    self = [super init];
    if (self) {
        _myArray = [NSArray array];  // use _notation here and in setter/getters but not elsewhere
    }
    return self;
}

或懒惰的初始......

- (NSArray *)myArray {
    if (!_myArray) {
        _myArray = [NSArray array];
    }
    return _myArray;  // again, elsewhere, use self.myArray, not _myArray
}