2016-09-26 57 views
1

假設我有一個屬性定義爲@property (copy) NSString *name如果一個屬性被定義爲副本,在分配給伊娃時是否還需要做一個副本?

假設我有一個init方法定義如下。

-(instancetype) initWithName:(NSString *)name 
{ 
    self = [super init]; 
    if (self) 
    { 
     _name = [name copy]; //Do I need this copy or will ARC do it automatically? 
    } 
    return self; 
} 

我需要複製的註釋行或將ARC處理它基於屬性聲明copy就像它會在合成的制定者?

回答

3

copy適用於屬性的合成setter方法,而不是支持實例變量。

由於您繞過initWithName:方法中的屬性並直接分配給實例變量,因此不會自動應用copy

爲了兌現複製該值的合約,當您直接爲實例變量賦值時,應該明確地調用copy。這與ARC(或MRC)無關。這都是關於你在物業上定義的合同。

tl; dr - 是的,您應該在您發佈的代碼中撥打copy

相關問題