0

我有一个非常令人沮丧的问题。
当我在解码 NSArray 后尝试释放 NSKeyedUnarchiver 对象时,会出现“EXC_BAD_ACCESS”错误。
但是当我不释放它或解码其他对象(例如 NSString)时,一切都很顺利。
我不明白......对我来说,看起来“decodeObjectForKey”方法改变了“解码器”对象中的某些内容(但并非总是如此?!)。而在调试器中,调用此方法后唯一改变的变量是“_replacementMap”。但我不知道如何修复这个错误。
我希望你能帮助我。
这是示例代码:

+ (NSArray *)decodeArticles {
NSString *archivePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Articles.archive"];
NSData *decoderData = [[NSData alloc] initWithContentsOfFile:archivePath];
NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:decoderData];

NSArray *savedArticles = [[decoder decodeObjectForKey:@"articles"] copy];
if (!savedArticles) {
    savedArticles = [[NSArray alloc] init];
}

[decoder finishDecoding];
//[decoder release];

return savedArticles;

}

4

1 回答 1

0

还有几件事:1.需要释放decoderData;初始化解码器后应该能够做到这一点;认为静态分析器应该指出这一点。2.尝试移动[decoder finishDecoding];[解码器发布];在 if 块之前 3. 约定可能会建议您返回一个自动释放的对象,因为实现是一个类方法。您可能会考虑向该方法添加路径参数。4. 将副本更改为自动发布。5.你数组中的对象肯定会影响编码过程。这可以解释为什么某些“标准”对象以您期望的方式编码和解码。

于 2010-10-21T04:08:39.560 回答