2013-08-02 38 views
1

沒有ARC我寫的一套方法,這樣iOS中的SET方法時啓用ARC

- (void)setArr:(NSMutableArray *)arr 
{ 
    _arr = [arr retain]; 
} 

但Xcode中告訴我,「‘保留’是不可用:自動引用計數模式不可用」時啓用ARC 。

+8

只要'_arr = arr;'。爲什麼你甚至實現了這樣的二傳手?讓它合成。 – rmaddy

+0

這不是一個很好的二傳手。如果您先設置一個值,然後再設置一個值,則預ARC會導致泄漏。 –

+0

如果你用這種方法讓你的setter沒有ARC,你可能會有一個相當大的內存泄漏。 – yinkou

回答

0

當使用弧線,所有你需要做的就是讓系統在保留/釋放,這意味着:

- (void)setArr:(NSMutableArray *)arr 
{ 
    _arr = arr; 
} 

但是,如果你的二傳手是這樣簡單的只是更容易讓編譯器合成它。

此前,您必須使用@synthesize,但現在將其聲明爲標題上的屬性就足夠了。

@property (strong, nonatomic) NSMutableArray *arr; 
3

_arr = arr;就是這一切必要的。但實際上,根據您的代碼示例,不需要自己編寫setter。只需在頭文件中聲明@property NSMutableArray *arr;就足以讓編譯器生成setter和getter。當編譯ARC啓用時,保留和釋放調用由編譯器爲您生成。