【问题标题】:NSMutableArray memory Management when allocated directly直接分配时的 NSMutableArray 内存管理
【发布时间】:2011-12-21 19:27:36
【问题描述】:

我知道,当我们将对象 obj 添加到 NSMutableArray 中时,它会获得该对象的 co_ownership。所以我们可以在添加到 NSMutableArray 之后释放对象 obj。而当我们释放NSMutableArray的时候,它也调用了释放它里面的所有对象。所以没有内存泄漏,一切都很好。

我怀疑是否喜欢

NSMutableArray myArray = [[NMutableArray alloc] init];
[myArray addObject:[MyClass alloc] init]];
[myArray release];

这会导致我们程序中的任何内存泄漏吗?

【问题讨论】:

    标签: iphone objective-c memory-management nsmutablearray


    【解决方案1】:

    是的,确实会导致内存泄漏。

    违规行是(为了清楚起见,我已经将其拆分):

    [myArray addObject:
        [[MyClass alloc] init] // <- An instance is allocated with ownership
    ]; // <- The array retains the instance
    

    最后,the retain/release ownership are not balanced 并导致泄漏。

    一种解决方案是在添加之前进行分配:

    MyClass *obj = [MyClass alloc] init];
    [[myArray addObject:obj];
    [obj release];
    

    【讨论】:

      【解决方案2】:

      autorelease 放入您的MyClass。这应该可以解决任何内存泄漏

      NSMutableArray myArray = [[NMutableArray alloc] init];
      [myArray addObject:[[[MyClass alloc] init] autorelease];
      [myArray release];
      

      【讨论】:

        猜你喜欢
        • 2011-09-06
        • 2010-10-02
        • 2011-07-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多