我是否负责在dealloc中发布UIView的gestureRecognizers?

时间:2011-02-04 16:31:58

标签: ios uigesturerecognizer memory-management

我已将UIGestureRecognizer附加到UIView。在dealloc期间释放这个是谁的责任?

具体做法是:

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

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

因此,self.view目前只保留gestureRecognizer。

更新 我应该更清楚。我的问题与视图dealloc方法有关。视图发布时,视图的超类是否处理gestureRecognizer的释放。我现在假设是这样的。

2 个答案:

答案 0 :(得分:2)

您的代码是正确的。

该视图使用[self.view addGestureRecognizer:t]获取手势识别器的所有权。

您可以在创建时自动释放t来整理代码:

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

这意味着t的所有权都在一个地方处理,从而减少了代码修改后引入问题的可能性。

答案 1 :(得分:2)

根据经验,只要您拨打releaseallocnew,就可以致电copy

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

当你可以自动释放你的手势识别器时,我会,因为在可能的情况下显式释放对象是更好的内存管理。 (在自动释放池耗尽之前,自动释放的对象不会被释放。)