[英]iPhone - the apple crashes with releasing NSMutableArray
This is my code using NSMutableArray.这是我使用 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];
}
My apple crashes at line:[map release];我的苹果在线崩溃:[地图发布];
What's wrong in my code?我的代码有什么问题?
I tried releasing 'map' as follow.我尝试按如下方式发布“地图”。
- (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]
}
}
Then the apple does not crash.然后苹果不会崩溃。 How solve this problem?
如何解决这个问题?
The arrayWithObject:
method returns an autoreleased object; arrayWithObject:
方法返回一个自动释放的 object; you need to either retain the array:您需要保留数组:
map = [[NSMutableArray arrayWithObject:element] retain];
or use the initWithObject:
method:或使用
initWithObject:
方法:
map = [[NSMutableArray alloc] initWithObject:element];
If map is a retained/copied property do self.map=...
to retain it.如果 map 是保留/复制的属性,请执行
self.map=...
保留它。 [NSMutableArray arrayWithObject:element]
returns an autoreleased object that needs to be retained. [NSMutableArray arrayWithObject:element]
返回需要保留的自动释放 object。
You are using the convenience initializer arrayWithObject
, which has an implicit autorelease
.您正在使用方便初始化器
arrayWithObject
,它具有隐式autorelease
。 You can't release
an autoreleased object.您不能
release
自动发布的 object。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.