当NSMutableArray返回时发生崩溃?
问题描述:
我有这样的代码(该函数将被一次又一次地调用),但返回的对象给出“不良访问”,NSLog打印正确的字符串,但有时候(我一次又一次地称为 )给出崩溃..任何有助于改变这一代码,如果我去掉“自动释放”的方法,它worsks精细当NSMutableArray返回时发生崩溃?
- (NSMutableArray *)getAll:(NSString *)type
{
NSLog(@"Type: %@", type);
NSMutableArray *toReturn = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];
rs = [db executeQuery:Query1];
while ([rs next]) {
[toReturn addObject:[rs stringForColumn:@"Name"]];
NSLog(@"name: %@", [rs stringForColumn:@"Name"]);
}
[rs close];
return toReturn;
}
答
你需要确保你的字符串不会在此期间释放。尝试改变
[toReturn addObject:[rs stringForColumn:@"Name"]];
到
[toReturn addObject:[[rs stringForColumn:@"Name"] copy]];
请参阅我的Q再次,我已经在使用的NSMutableArray自动释放, 我试图使用复制,它给出了同样的崩溃 – 2010-03-16 09:00:00
我看不到一个自动释放池(你是否删除了部分代码?),我看不到副本。我在这里错过了什么吗?也许你想看看http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html#//apple_ref/doc/uid/20000047-CJBFBEDI – hanno 2010-03-16 09:21:18
副本是不存在,但我用于检查...我用 NSMutableArray * toReturn = [[[[[NSMutableArray alloc] initWithCapacity:0] autorelease]; – 2010-03-16 09:43:09