我已将UIGestureRecognizer附加到UIView。在dealloc期间释放这个是谁的责任?
具体做法是:
UITapGestureRecognizer *t =
[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)];
[self.view addGestureRecognizer:t];
[t release];
因此,self.view目前只保留gestureRecognizer。
更新 我应该更清楚。我的问题与视图dealloc方法有关。视图发布时,视图的超类是否处理gestureRecognizer的释放。我现在假设是这样的。
答案 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)
根据经验,只要您拨打release
,alloc
或new
,就可以致电copy
。
由于您调用了alloc,因此您的代码不会过度释放或泄漏任何内容。
当你可以自动释放你的手势识别器时,我会不,因为在可能的情况下显式释放对象是更好的内存管理。 (在自动释放池耗尽之前,自动释放的对象不会被释放。)