2010-11-24 201 views
0

我想確定推薦的方法來設置NSString屬性的默認值。設置NSString屬性的默認值

我的理解是不使用安全訪問在類的init和dealloc的方法的方法。我經常有我想要分配默認值的字符串常量。推薦的方式是什麼(考慮到iVar將在dealloc方法中發佈)?

比如我瞭解以下內容是不安全的:

@property (nonatomic, copy) NSString *identifier; 
.... 

- (id) init 
{ 
    self = [super initWithLayer:displayLayer]; 

    if (self != nil) 
    { 
     self.identifier = @"fireSpell01"; 
    } 

    return self; 
} 

它是確定,還是建議要做到這一點:

identifier = [@"fireSpell01" retain]; 

或者我必須這樣做:

identifier = [[NSString stringWithString:@"fireSpell01"] retain]; 

回答

3

只要這樣做:

identifier = @"fireSpell01"; 

有沒有必要retain的字符串。字符串常量存在於程序的整個生命週期中,並且永遠不需要保留或釋放。做[[NSString stringWithString:@"fireSpell01"] retain]只是創建一個不必要的副本,是毫無意義的。

你想避免的是使用initdealloc方法中的屬性設置器。由於setter可能有副作用,這些副作用取決於某些狀態值,因此您不想在部分構建/部分銷燬的對象上調用它們。在init期間直接分配給ivars並跳過setter更好。

+0

如果在標識符上(在dealloc期間)調用發佈時,它是否可以直接按照您的建議進行分配? – 2010-11-24 06:50:22