因此,当我们想要使用类时,我们会执行类似
的操作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属性的情况下工作。
答案 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
}