我负责释放一个UIView的gestureRecognizers在dealloc?
我已经将UIGestureRecognizer附加到UIView。 在dealloc期间释放这个是谁的责任?
特别:
UITapGestureRecognizer *t = [[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)]; [self.view addGestureRecognizer:t]; [t release];
所以,self.view目前只有gestureRecognizer保留。
更新我应该更清楚。 我的问题与视图dealloc方法有关。 当视图被释放时,视图的超类是否处理了gestureRecognizer的释放。 我目前认为是这样。
经验法则是,只要你调用alloc
, new
或者copy
,就可以调用release
。
既然你叫alloc,你的代码不会过度释放或泄漏任何东西。
虽然你可以 autorelease你的手势识别器,我不会因为明确释放对象,在可能的情况下,更好的内存pipe理。 (Autoreleased对象不会释放,直到自动释放池被耗尽。)
你的代码是正确的。
该视图通过[self.view addGestureRecognizer:t]
获取手势识别器的所有权。
您可以在创build代码时通过自动释放来清理代码:
UITapGestureRecognizer *t = [[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(tapHandler:)] autorelease]; [self.view addGestureRecognizer:t];
这意味着t
所有权在一个地方被处理,从而减less了如果代码被修改而引入问题的可能性。