【问题标题】:When do I dealloc an object?什么时候解除分配对象?
【发布时间】:2011-11-20 00:33:39
【问题描述】:

在我的一个函数中,我有一个 while 循环,在某些情况下它可能需要临时创建一个对象。我的代码如下所示:

while(c < end){
    if(specialCase){
        Object *myObject = [Object alloc];
        //do stuff with myObject
        //I tried [myObject dealloc] here, but it crashed when this method was called.
    }
    c++;
}

代码按原样运行良好,但我担心内存泄漏。我想知道是否应该以及如何释放 myObject。

【问题讨论】:

    标签: iphone ios memory-management ios4 dealloc


    【解决方案1】:

    你永远不会直接调用 Dealloc。

    您调用 Release,当保留计数达到 0 时,将在对象上调用 dealloc。

    【讨论】:

    • 谢谢!我曾尝试在 dealloc 之前调用 release 并且遇到了错误的访问错误。我想现在我知道为什么了。
    【解决方案2】:

    你不应该直接调用dealloc方法,在allocedretain的对象上调用release会隐式调用dealloc,如果保留对象的计数满足iOS系统提出的条件(通常如果保留计数对象)。

    阅读NSObject 类中dealloc 方法的苹果文档,并通过Memory Management Programming Guide 进行objective-C

    【讨论】:

      【解决方案3】:

      试试这个

      while(c < end){
      if(specialCase){
      Object *myObject = [[Object alloc] autorelease];
          //do stuff with myObject
          //I tried [myObject dealloc] here, but it crashed when this method was called.
      }
      c++;
      

      }

      【讨论】:

        【解决方案4】:

        您或许可以尝试使用智能指针。 这应该负责垃圾收集和任何异常处理。此外,Boost 库可以移植到 ios。

        【讨论】:

          猜你喜欢
          • 2018-11-11
          • 2016-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-17
          • 2018-04-06
          • 2011-11-29
          • 2021-09-10
          相关资源
          最近更新 更多