Iphone Objective-C init方法的正确语法

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

为什么当合成setter试图释放未定义的myArray对象时,此公共属性初始化方案没有失败的风险?或者属性对象是否自动初始化为nil,而我根本不需要这样做

@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吗?