简体   繁体   English

iPhone - 苹果因发布 NSMutableArray 而崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM