Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C,指南识别器分配和发布_Objective C_Ios_Xcode - Fatal编程技术网

Objective c 目标C,指南识别器分配和发布

Objective c 目标C,指南识别器分配和发布,objective-c,ios,xcode,Objective C,Ios,Xcode,我是obj-c的新手,我只是想知道是否有人能解释一下。在这里,我们向当前视图添加一个UIGestureRecognitor,然后立即释放它,为什么?如果我们发布它,这不会使它在程序中无用吗 recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)]; ((UIPanGestureRecognizer *)recognizer).minimumNumberOfTouc

我是obj-c的新手,我只是想知道是否有人能解释一下。在这里,我们向当前视图添加一个UIGestureRecognitor,然后立即释放它,为什么?如果我们发布它,这不会使它在程序中无用吗

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操作,它返回一个retain count为1的对象

换言之,您可以用以下术语思考:

  • alloc->保留对象
  • AddGestureRecognitor->保留对象 由于您希望
    self.view
    成为手势识别器的唯一所有者,因此您可以调用
    release
    一次,以使事情恢复正常。解除分配
    self.view
    时,它将在其手势识别器上调用release,这也将解除分配

    如果不这样做,则会出现内存泄漏,因为当self.view被解除分配时,将在手势识别器上调用
    release
    ,但这不足以使保留计数降至零(因为
    alloc
    隐含的初始
    retain


    希望这能澄清一些事情

    在iOS中,有一种称为(保留计数)的东西,这是一个内部计数器,用于跟踪对象或对象所使用的所有引用。。因此,每次对对象进行(alloc、copy、retain)操作时,它都会将其retain计数器增加1。。在这三种情况下,您负责(释放)对象,这将使计数器也减少1。。在您的情况下,您做出了正确的事情来释放对象,但它没有释放,因为当您将其添加到视图时,它的保留计数器增加了1,因此它仍在内存中,但您不负责删除它。iOS将为您执行此操作(自动释放)。希望这会有帮助。祝你好运。

    “乳房管理”?那是为了一切顺利吗?很抱歉,Objective-C一点也不允许你管理mammaries——你必须自己去做(为了记录在案,这个问题最初的标题是“Objective-C中的乳腺管理”。)