我是obj-c的新手,我只是想知道是否有人可以解释这一点。在这里,我们将UIGestureRecognizer添加到当前视图,然后我们立即发布它,为什么?如果我们发布它会不会使它在程序中无用?
recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
((UIPanGestureRecognizer *)recognizer).minimumNumberOfTouches = 3;
[self.view addGestureRecognizer:recognizer];
[recognizer release];
答案 0 :(得分:2)
执行时:
[self.view addGestureRecognizer:recognizer];
手势识别器保留计数增加。因此,以下release
只是平衡alloc / init操作,它返回一个保留计数为1的对象。
换句话说,你可以用这些术语思考:
因为您希望self.view
成为手势识别器的唯一所有者,所以您只需拨打release
一次即可恢复原状。当self.view
被解除分配时,它将在其手势识别器上调用release,这也将被解除分配。
如果你没有这样做,你会发生内存泄漏,因为当取消分配self.view时,会在手势识别器上调用release
,但这不足以使保留计数下降为零(因为retain
隐含的初始alloc
)。
希望这能澄清一些事情。
答案 1 :(得分:0)
在iOS中有一些叫做(保留计数)的东西,这是一个内部计数器,用于跟踪对象或对象使用的所有引用..所以每次你做(分配,复制,保留)到对象它将增加其保留计数器1 ..在这三种情况下,你负责(释放)对象,这将减少计数器也为1 ..在你的情况下你做了正确的事情释放对象,但它没有' t deallocated因为当你将它添加到视图时它的保留计数器增加1,所以它仍然在内存中,但你不负责删除它iOS将为你做这个(自动释放)。希望这会有所帮助。祝你好运。