0

我正在对属性列表进行一些归档,当我使用 NSKeyedUnarchiver 取消归档我的数据时,我发现如果我之后释放该对象,我的应用程序会崩溃。我想知道 finishDecoding 消息是否也会自动释放对象。当我释放它时它崩溃似乎很奇怪。

4

2 回答 2

2

你释放什么?NSKeyedUnarchiver 还是未归档的对象?

您是否应该发布 NSKeyedUnarchiver 取决于您如何创建它。它遵循通常的规则。如果你使用alloc+initForReadingWithData你应该释放,如果你使用unarchiveObjectWithDataunarchiveObjectWithFile- 你不应该。

关于 的结果decodeObjectForKey,它也遵循通常的规则,即方法返回自动释放的对象,除非你明确保留它,否则你不应该释放它。

关于finishDecoding:您应该在 NSKeyedUnarchiver 对象被释放之前显式调用它。在那之后您不应该使用 unarchiver,但对象仍然存在。

于 2010-04-16T17:00:21.190 回答
0

如果您使用

[[NSKeyedUnarchiver alloc] initForReadingWithData:data]

然后你有责任在你完成解档后释放它。

如果它在您发布后崩溃,那么您的错误很可能在其他地方。可能是因为您使用的是取消归档程序提供的对象而没有保留它们。当 unarchiver 被解除分配时,它会释放为您提供的对象。如果你没有保留这些,它们将被释放,当你引用这些对象时你会崩溃。

于 2010-04-16T16:50:41.563 回答