代码之家  ›  专栏  ›  技术社区  ›  Lee Probert

nskeyedunarchiver会自动释放吗?

  •  0
  • Lee Probert  · 技术社区  · 15 年前

    我正在对属性列表进行一些存档,当我使用nskeyedunarchiver取消存档数据时,我发现如果我随后释放对象,我的应用程序就会崩溃。我想知道finishdecoding消息是否也会自动释放对象。当我释放它时它崩溃了,这看起来很奇怪。

    2 回复  |  直到 15 年前
        1
  •  2
  •   SergGr    15 年前

    你释放了什么?是钥匙还是未归档的物体?

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

    关于 decodeObjectForKey ,它还遵循通常的规则,即方法返回自动释放的对象,除非显式保留该对象,否则不应释放它。

    关于 finishDecoding :在释放nskeyedunarchiver对象之前,需要显式调用它。在这一点之后,您不应该使用unarchiver,但对象仍然是活动的。

        2
  •  0
  •   Alex Wayne    15 年前

    如果使用

    [[NSKeyedUnarchiver alloc] initForReadingWithData:data]
    

    那么你就有责任在你完全不受约束的时候释放它。

    如果你发布后它崩溃了,那么你的bug很可能就在别处。可能是因为您使用的对象是您的unarchiver提供的,而没有保留它们。当释放unarchiver时,它会释放为您提供的对象。如果您没有保留这些对象,它们将被释放,当您引用这些对象时将崩溃。