我正在对属性列表进行一些归档,当我使用 NSKeyedUnarchiver 取消归档我的数据时,我发现如果我之后释放该对象,我的应用程序会崩溃。我想知道 finishDecoding 消息是否也会自动释放对象。当我释放它时它崩溃似乎很奇怪。
问问题
1522 次
2 回答
2
你释放什么?NSKeyedUnarchiver 还是未归档的对象?
您是否应该发布 NSKeyedUnarchiver 取决于您如何创建它。它遵循通常的规则。如果你使用alloc
+initForReadingWithData
你应该释放,如果你使用unarchiveObjectWithData
或unarchiveObjectWithFile
- 你不应该。
关于 的结果decodeObjectForKey
,它也遵循通常的规则,即方法返回自动释放的对象,除非你明确保留它,否则你不应该释放它。
关于finishDecoding
:您应该在 NSKeyedUnarchiver 对象被释放之前显式调用它。在那之后您不应该使用 unarchiver,但对象仍然存在。
于 2010-04-16T17:00:21.190 回答
0
如果您使用
[[NSKeyedUnarchiver alloc] initForReadingWithData:data]
然后你有责任在你完成解档后释放它。
如果它在您发布后崩溃,那么您的错误很可能在其他地方。可能是因为您使用的是取消归档程序提供的对象而没有保留它们。当 unarchiver 被解除分配时,它会释放为您提供的对象。如果你没有保留这些,它们将被释放,当你引用这些对象时你会崩溃。
于 2010-04-16T16:50:41.563 回答