簡體   English   中英

Objective-C init方法的正確語法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM