gpt4 book ai didi

objective-c - Objective C、UIGestureRecognizer的分配与释放

转载 作者:行者123 更新时间:2023-11-28 23:05:36 27 4
gpt4 key购买 nike

我是 obj-c 的新手,我只是想知道是否有人可以解释这一点。这里我们给当前view添加了一个UIGestureRecognizer,然后我们马上释放,为什么呢?如果我们释放它,这不会使它在程序中无用吗?

recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];

((UIPanGestureRecognizer *)recognizer).minimumNumberOfTouches = 3;

[self.view addGestureRecognizer:recognizer];

[recognizer release];

最佳答案

当你执行时:

[self.view addGestureRecognizer:recognizer];

手势识别器保留计数增加。因此,下面的 release 只是平衡了 alloc/init 操作,它返回一个保留计数为 1 的对象。

换句话说,你可以用这些术语来思考:

  1. alloc -> 保留对象;
  2. addGestureRecognizer -> 保留对象;

因为您希望 self.view 成为手势识别器的唯一所有者,所以您调用一次 release 来让事情恢复正常。当 self.view 被释放时,它会在其手势识别器上调用 release,这也会被释放。

如果您不这样做,就会发生内存泄漏,因为当 self.view 被释放时,将在手势识别器上调用 release 但这不足以使保留计数降为零(因为 alloc 隐含的初始 retain)。

希望这能澄清一些事情。

关于objective-c - Objective C、UIGestureRecognizer的分配与释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com