2011-05-07 71 views
3

我发现了一个类似的问题: NSMutableArray addObject in for loop - memory leakObjective-C的ADDOBJECT导致内存泄漏

但是所有这些建议似乎解决我的问题。

我有一个简单的循环,我创建一个对象并将其添加到数组。当我尝试在每个循环结束时释放对象时,应用程序将以“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 

任何帮助将非常感激。

谢谢。

+0

你可以发布'MyObj'的'init'消息吗? – 2011-05-07 13:04:22

+0

你在* MyObj *类中重写了* init *方法吗? – EmptyStack 2011-05-07 13:05:35

+0

我已经更新了上面的代码。没有init方法。只是getters/setters。它需要它吗? – GivP 2011-05-07 13:10:43

回答

3

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

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

    [super dealloc]; 
} 

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