我无法释放我在方法中创建的NSMutableArray。
SqliteData *s = [SqliteData alloc];
items = [NSArray alloc];
items = [s getItems:parent];
[s release];
IN SQLITeDATA类
-(NSMutableArray *)getItems:(NSString *)parent
{
NSMutableArray *items = [[[NSMutableArray alloc] init]autorelease];
return items
}
应用程序崩溃,如果我删除自动释放,它可以正常工作。
答案 0 :(得分:3)
正确的版本是:
SqliteData *s = [[SqliteData alloc] init];
items = [[s getItems:parent] retain];
[s release];
这与:
类似,但不太优化SqliteData *s = [[[SqliteData alloc] init] autorelease];
items = [[s getItems:parent] retain];
注意内存泄漏:
SqliteData *s = [SqliteData alloc];
items = [NSArray alloc]; // memory leak there!
items = [s getItems:parent];
[s release];
您正在泄漏内存,因为您将新分配的items
地址替换为另一个地址。
没有alloc
的{{1}}是无意义的。 (你正在分配内存,但没有初始化它!)
答案 1 :(得分:2)
您在下一行使用不同的值覆盖第一个items
。您首先不需要alloc
- 它什么都不做。
在没有alloc
的情况下使用init
无效。使用[[foo alloc] init]
或[foo new]
。
自动释放的对象只是暂时的(直到当前池的生命周期结束,这通常是线程或回调的生命 - 不要指望对象将比它所处的函数的持续时间更长久存活)。您需要retain
他们。