【问题标题】:Is it ok to allocate released object again?可以再次分配释放的对象吗?
【发布时间】:2011-11-07 18:05:04
【问题描述】:

如果我这样做了

Object * myObject = [[Object alloc]init];
[myObject release];

在下一行分配我的对象有什么问题吗

myObject = [[Object alloc]init];

再来一次?

【问题讨论】:

    标签: objective-c memory-management alloc


    【解决方案1】:

    这样做是安全的。

    原因是myObject 不是对象,它是对象的引用(或指针,如果你想准确的话)。这意味着您有 2 个完全独立的对象,但您忘记了对第一个对象的引用。

    【讨论】:

      【解决方案2】:

      完全没有问题。 [myobject release];释放myObject指向的对象。

      稍后,myobject = [[Object alloc] init] 将使myobject 指向另一个对象。

      【讨论】:

      • 如果您执行 myobject1 = alloc init myobject2 = alloc init 您需要为每个此类对象指针提供堆栈空间,它甚至可以避免您在堆栈上拥有更多对象实例
      【解决方案3】:

      这并没有错。这就是您确保不会泄漏您的第一个对象的方法。

      但是,从技术上讲,您并没有再次分配释放的对象。您只是再次使用旧指针。

      Object * myObject = [[Object alloc]init];
      myObject = [[Object alloc]init];
      

      将导致您创建的第一个对象泄漏。

      【讨论】:

      • 这是我第一次从 Big Nerd Ranch 的书籍中学到东西。
      • 你可以使用 [[[object alloc] init] autorelease] 以防你不想记住释放重要的内存。
      【解决方案4】:

      当然可以。这种技术在局部方法变量中特别有用,您可以通过将其重新分配为新对象来重用一次声明的对象..!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-15
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多