释放NSKeyedUnarchiver导致崩溃

时间:2011-04-18 05:46:59

标签: iphone objective-c pointers memory-management

-(id)func
{
        NSData* data = [[NSData alloc] initWithContentsOfFile:aFilePath];
    NSKeyedUnarchiver* unachiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    id object = [unachiver decodeObjectForKey:key];
    [unachiver finishDecoding];
        [unachiver release];
        [data release];
    return object;
}

调用此方法时,例如:

id anotherObject = [self func];

然后当我向另一个对象发送消息时,它会导致崩溃,我知道它是一个悬挂指针,但我不知道如何解决它。

1 个答案:

答案 0 :(得分:0)

decodeObjectForKey:正在返回一个自动释放的对象。当您向anotherObject发送消息时,它已被取消分配。要停止此操作,您需要确保在拥有该对象时retain该对象:

id anotherObject = [[self func] retain];

完成对象后,您应该调用release以确保它被取消分配。