【问题标题】:Use of self with an instance for alloc and release [duplicate]将 self 与实例一起用于分配和释放 [重复]
【发布时间】:2012-02-10 06:59:45
【问题描述】:

可能重复:
Why shouldn’t I use the getter to release a property in objective-c?

我对 alloc 和 self 的释放有点困惑。在查看了几个帖子和教程之后,似乎需要更多建议。以下是问题列表:

  1. 这是分配和释放的正确方法吗? self.selectPopover = [[UIPopoverController alloc] init];

[self.selectPopover 发布];

  1. 试图从另一个类执行此代码。 classArr 在 ObjClass 中定义。当我分析此代码潜在泄漏时,发生“调用者此时不拥有的对象的引用计数不正确递减”。

ObjClass.classArr = [[NSMutableArray alloc]init];

[ObjClass.classArr 发布];

所以任何人都可以消除我对此的怀疑。提前致谢。

【问题讨论】:

    标签: iphone ios xcode memory-management


    【解决方案1】:

    您可以通过这篇文章了解您正在寻找的概念:

    Objective-C Difference between setting nil and releasing

    【讨论】:

      【解决方案2】:

      我假设您已将属性创建为retain
      当你
      ObjClass.classArr = [[NSMutableArray alloc] init];
      此时,retainCount 变为两个,一个是因为alloc,另一个是通过retain 类型的属性分配它
      当你 [ObjClass.classArr release]; 这个时候你发送一个版本并且 reatinCount 从 2 变为 1。
      所以要么你这样做

      ObjClass.classArr = [[NSMutableArray alloc]init];
      [ObjClass.classArr release];
      

      这使得它的保留计数为一
      或者你可以这样做,这是实际发生的情况

         classArr = [[NSMutableArray alloc] init];
      

      分配没有使retainCount 为一的属性的ivar。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        • 2014-07-28
        • 2020-01-06
        • 1970-01-01
        • 2015-10-07
        相关资源
        最近更新 更多