2011-02-04 26 views
6

我已将UIGestureRecognizer附加到UIView。在dealloc期间释放它的责任是谁的?我是否在dealloc中负责释放UIView的gestureRecognizers?

具体做法是:

UITapGestureRecognizer *t = 
[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)]; 

[self.view addGestureRecognizer:t]; 
[t release]; 

所以,self.view目前拥有gestureRecognizer的唯一保留。

更新 我应该更清楚。我的问题与视图dealloc方法有关。当视图被释放时,视图的超类是否处理gestureRecognizer的释放。我目前认为是这样。

回答

1

经验法则是,只要您致电alloc,newcopy,即可致电release

由于您调用了alloc,因此您的代码不会过度释放或泄漏任何内容。

虽然你可以自动释放你的手势识别,我不因为明确地释放对象,如有可能,是更好的内存管理。 (自动释放的对象直到自动释放池被耗尽时才会释放。)

2

您的代码是正确的。

视图将手势识别器的所有权与[self.view addGestureRecognizer:t]

您可以通过自动释放t当你创建它整理代码:

UITapGestureRecognizer *t = [[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)] autorelease]; 
[self.view addGestureRecognizer:t]; 

这将意味着t各种所有制在一个地方进行处理从而减少了如果代码被修饰的引入问题的潜力。

+0

对所有对象调用autorelease而不是自己释放它们不是一种好习惯。 – Tieme 2012-09-20 11:05:18

相关问题