2012-04-02 39 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。这应该这样做

希望这可以帮助你。