【问题标题】:getting leak trying to release NSMutableArray试图释放 NSMutableArray 泄漏
【发布时间】:2011-10-06 05:19:35
【问题描述】:

我在 UIViewController 中释放 NSMutableArray 时出现内存泄漏,该控制器会旋转,然后在 ViewDidLoad 中分配并初始化数组,向其中添加对象;然后当视图关闭时:它的 dealloc() 释放每个数组对象,然后释放数组。

通常会导致泄漏。

我的基本结构:...

...m  file:

NSMutableArray* foo;

@implementation ....

viewDidLoad
{
[[foo  alloc]  init];
...
}

dealloc
{
  for i = each foo object:
    [foo  objectAtIndex: i]  release];

    [foo  release];
}

...

【问题讨论】:

  • 你真的需要运行一个for循环来释放每个对象吗?我相信当数组本身被释放时,会向数组中的每个项目发送release 消息。
  • 请添加实际代码。因此,您不需要释放已添加到数组中的对象。 Array 保留它们,并在释放时释放它们。
  • @Deepak 你投了我的票吗

标签: ios memory-leaks nsmutablearray


【解决方案1】:

当释放一个 NSMutableArray 时,它会处理释放它的所有子元素。 NSArray、NSMutableDictionary、NSDictionary 等也是如此。

尝试将 foo 设置为标题中的实例变量,然后合成它:

...h file
@interface MyObject : NSObject {
    NSMutableArray* foo;
}

@property (nonatomic, retain) NSMutableArray *foo;

...m file
@implementation ....
@synthesize foo;

viewDidLoad
{
    self.foo = [[NSMutableArray  alloc]  init];
    ...
}

dealloc
{
    [foo  release];
}

【讨论】:

  • 不知何故,我认为他在这里做几乎完全相同的事情,这就是他必须得到泄漏的原因。 self.foo = [[NSMutableArray alloc] init]; 有 2 次保留,最后你只释放一次。
【解决方案2】:

当您的数组中的项目在其他地方被retained 时,可能会导致这种情况下的泄漏。向该项目发送release 消息只会减少其保留计数,而不会真正释放它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 2012-06-08
    • 2011-10-15
    • 2011-03-06
    • 2011-01-27
    • 2013-02-11
    • 2012-07-29
    • 2011-01-21
    相关资源
    最近更新 更多