循环中的Objective-c addObject导致内存泄漏

时间:2011-05-07 13:01:58

标签: objective-c memory-management

我发现了类似的问题: NSMutableArray addObject in for loop - memory leak

但这些建议都没有解决我的问题。

我有一个简单的循环,我正在创建一个对象并将其添加到数组中。当我尝试在每个循环结束时释放对象时,应用程序崩溃为“EXC_BAD_ACCESS”。如果我不释放对象,我会泄露内存:

在.h

NSMutableArray *mainlist;
...
@property (nonatomic, retain) NSMutableArray *mainList;

在.m

@synthesize mainlist;
...

for (int i = 0; i < [self.objects count]; i++) {

    MyObj *myObj = [[MyObj alloc] init];

    myObj.title = [[self.objects objectAtIndex: i] valueForKey: @"title"];

    [self.mainlist addObject:myObj];

    [myObj release]; // crashes with release
}

MyObj只有一些属性:

@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *date_text;
...
@synthesize title;
@synthesize date_text;

- (void)dealloc
{
    [super dealloc];

    [title release];
    [date_text release];
}

@end

非常感谢任何帮助。

感谢。

1 个答案:

答案 0 :(得分:3)

崩溃导致您首先调用超类的dealloc,然后尝试释放属性。将其更改为:

- (void)dealloc
{
    [title release];
    [date_text release];

    [super dealloc];
}

而且:当你在那里添加对象时,我几乎可以肯定你的self.mainlist是零。创建属性并不意味着该属性将自动初始化。