[英]Correct syntax for Objective-C init method
當合成的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;
}
...
Objective-C中的對象實例變量默認初始化為nil
。 此外,允許使用消息傳遞nil
(與在Java,C#或C ++等函數調用語言中調用null
方法不同)。 消息為nil
的結果為nil
,這稱為[nil release];
只是nil
,不是例外。
另外,最好在-init
和-dealloc
方法中直接分配/調用實例變量:
-(id)init {
if ( self = [super init] ) {
myArray = nil;
}
return self;
}
- (void)dealloc {
[myArray release];
[super dealloc];
}
正如其他人所說,實例變量已經初始化nil
。
另外, 根據Apple的文檔 ,實例變量應該直接在init
方法中設置,因為類(或其子類)的getter / setter方法可能依賴於完全初始化的實例。
它已經初始化nil
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.