2012-04-02 44 views
1

我會如何重構的ARC驗證碼:重構此代碼爲ARC遵守

- (UIGestureRecognizer *)createTapRecognizerWithSelector:(SEL)selector { 
    return [[[UITapGestureRecognizer alloc] initWithTarget:self action:selector] autorelease]; 
} 

感謝您的幫助

+3

據我所知,ARC接管了所有參考問題的控制權。所以你可以刪除你的autorelease消息(並保留,釋放,dealloc)。還是我誤解你的意圖? – TRD 2012-04-02 14:10:51

回答

4

刪除自動釋放語句,並重新命名方法:

- (UIGestureRecognizer *)newTapRecognizerWithSelector:(SEL)selector 
{ 
    return [[UITapGestureRecognizer alloc] initWithTarget:self action:selector]; 
} 
+0

任何想法爲什麼我會得到錯誤消息「使用未聲明的聲明的標識符'UITapRecognizer'?再次感謝 – hanumanDev 2012-04-02 14:32:44

+1

更改名稱以* new *開頭*隱式地將方法從[returns unretained]中更改(http://clang.llvm .org/docs/AutomaticReferenceCounting.html#objects.operands.other-returns)to [returned retained](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#objects.operands.retained-returns)。雖然'create'確實會返回一個自動釋放的對象,但是對於ARC重構的'new'方法會返回一個對調用者的擁有引用,但是它與原始方法有所不同,但它與原始方法有所不同 – Caleb 2012-04-02 14:32:47

+0

@Caleb,我認爲這更準確地表達了代碼的行爲,繼續使用'create'將繼續暗示自動釋放的對象正在返回,在ARC下,這不再是explici這樣的情況。 – isaac 2012-04-02 14:56:15

2

刪除autorelease。這應該這樣做

希望這可以幫助你。