iPhone - 苹果崩溃释放NSMutableArray
这是我的代码使用NSMutableArray。iPhone - 苹果崩溃释放NSMutableArray
- (void) put:(NSString *)key value:(NSString *)value
{
Element *element = [[[Element alloc] initWith:key strValue:value] autorelease];
if (self.map) {
[map addObject:element];
}
else {
map = [NSMutableArray arrayWithObject:element];
}
}
-(void)dealloc
{
if (map) {
[map release];
}
[super dealloc];
}
我的苹果崩溃在线:[地图发布];
我的代码有什么问题?
我试着释放'地图'如下。
- (void) put:(NSString *)key value:(NSString *)value
{
Element *element = [[[Element alloc] initWith:key strValue:value] autorelease];
if (self.map) {
[map addObject:element];
}
else {
map = [NSMutableArray arrayWithObject:element];
[map release]
}
}
然后苹果不会崩溃。 如何解决这个问题?
如果地图是保留/复制的属性,请执行self.map=...
来保留它。 [NSMutableArray arrayWithObject:element]
返回需要保留的自动释放对象。
感谢您的早期建议。苹果一切正常。 – 2011-05-04 08:44:42
arrayWithObject:
方法返回一个自动释放对象;你需要选择保留数组:
map = [[NSMutableArray arrayWithObject:element] retain];
或使用initWithObject:
方法:
map = [[NSMutableArray alloc] initWithObject:element];
对于它的价值,我会使用第二个 - 它稍微高效一点,因为它不会将对象添加到autorelease池。 – deanWombourne 2011-05-04 08:56:49
您正在使用的便利初始化arrayWithObject
,其中有一个隐含的autorelease
。您不能release
自动释放对象。
买桃子。苹果已知会崩溃。 – Jake 2011-05-04 08:48:39
@MiRAGe:我真的很想把你的评论提交给日常的“最无用的评论” - 竞争。 – vikingosegundo 2011-05-04 08:53:57
我认为MiRAGe的评论是这里发布的第二个最无用的评论。 (现在我已经评论过了,它可能排在第三位!) – deanWombourne 2011-05-04 08:55:40