Iphone Objective-C init方法的正确语法
为什么当合成setter试图释放未定义的myArray对象时,此公共属性初始化方案没有失败的风险?或者属性对象是否自动初始化为nil,而我根本不需要这样做Iphone Objective-C init方法的正确语法,iphone,objective-c,ios,Iphone,Objective C,Ios,为什么当合成setter试图释放未定义的myArray对象时,此公共属性初始化方案没有失败的风险?或者属性对象是否自动初始化为nil,而我根本不需要这样做 @interface myClass : NSObject { NSArray* myArray; } @property (nonatomic, retain) NSArray* myArray; @end @implementation myClass @synthesize myArray; -(id)init { i
@interface myClass : NSObject {
NSArray* myArray;
}
@property (nonatomic, retain) NSArray* myArray;
@end
@implementation myClass
@synthesize myArray;
-(id)init {
if ( self = [super init] ) {
self.myArray = nil;
}
return self;
}
...
它已经初始化为
nil
正如其他人所说,实例变量已经初始化为nil
此外,实例变量应直接在
init
方法中设置,因为类(或其子类)的getter/setter方法可能依赖于完全初始化的实例。Objective-C中的对象实例变量默认初始化为nil
。此外,允许消息传递nil
(不同于在Java、C#或C++等函数调用语言中对null
调用方法)。发送到nil
的消息的结果是nil
,此调用[nil release]
只是nil
,并不例外
另一方面,最好的做法是直接在-init
和-dealoc
方法中分配/调用实例变量:
-(id)init {
if ( self = [super init] ) {
myArray = nil;
}
return self;
}
- (void)dealloc {
[myArray release];
[super dealloc];
}
“由于类(或其子类)的getter/setter方法可能依赖于一个完全初始化的实例”,您有这个方法的来源吗?谢谢我当然知道,它在苹果文档中。我将编辑我的答案以包含一个参考。“快速回答”?这不是目标C吗?