【问题标题】:NSMutableArray - removeallobjects produces a leakNSMutableArray - removeallobjects 产生泄漏
【发布时间】:2011-03-23 07:05:54
【问题描述】:

我有一个用对象填充的 mutableArray。当我尝试重新填充数组时,我首先使用 removeAllObjects - 这会产生内存泄漏......

对象的属性在dealloc时被合成、保留和释放。

数组在 viewDidLoad 上初始化如下:

theArray = [[NSMutableArray alloc] initWithCapacity:10];

...它被保留和合成。 (@property (nonatomic, retain) NSMutableArray *theArray)

我正在像这样在 while 循环中添加对象:

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

theObject.someProperty = @"theprop";

[theArray addObject: theObject];

[theObject release];

然后在下一次调用该方法时,我会像这样删除所有对象:

[theArray removeAllObjects];

这就是泄漏发生的地方。如果我将此行注释掉,则不会出现泄漏。所以我猜我的对象做错了什么?

【问题讨论】:

  • 如果只是实例化myObject然后单独释放会不会有泄漏?

标签: iphone memory-leaks nsmutablearray


【解决方案1】:

看来问题解决了……

a) 我没有意识到,当我使用仪器时,应用程序在启动前并未编译 - 因此,我所做的一些更改在使用仪器时没有生效。所以现在我首先构建并在更改后运行,然后然后在仪器中运行它。

b) 因此,我真的不知道是什么解决了这个问题。但可能是我的对象中的 dealloc-method 错误。 我正在使用:

[super dealloc];

[myProperty release];

而不是相反:

[myProperty release];
[super dealloc];

感谢您的帮助!

【讨论】:

    【解决方案2】:

    myObject 是否有任何保留的属性?如果是这样,您是否在 dealloc 消息中将它们设置为 nil ?如果没有,当它被释放时,它不会释放其属性设置的对象。

    【讨论】:

    • yes - 保留对象中的属性。我在 dealloc .h @property (nonatomic, retain) NSString *someProperty; 中使用 release .m @synthesize someProperty; -(void)dealloc{ [someProperty release]; [超级释放]; }
    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 2011-10-15
    • 2011-03-06
    • 2013-02-11
    • 2012-07-29
    • 2011-01-21
    相关资源
    最近更新 更多