目标C语言 iPhone -苹果崩溃与释放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];
}

我的苹果在line:[map release];

我的代码有什么问题?

我尝试按如下方式释放"map"。

- (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]
    }
}

那么苹果就不会崩溃。如何解决这个问题?

arrayWithObject:方法返回一个自动释放对象;您需要保留数组:

map = [[NSMutableArray arrayWithObject:element] retain];

或使用initWithObject:方法:

map = [[NSMutableArray alloc] initWithObject:element];

如果map是一个保留/复制属性,执行self.map=...来保留它。[NSMutableArray arrayWithObject:element]返回一个需要保留的自动释放对象

您正在使用方便初始化器arrayWithObject,它具有隐式autorelease。你不能release自动释放的对象

最新更新