我已经从使用 NSCoder 编码中带回了一个根对象,并且不知道如何内存管理这个返回的对象。我用一个自动释放池包围了它,但是这个对象并没有随池一起出去。代码在这里,见第 289 行代码可能会随着 Git Hub 提交而改变,但最终你会在工作代码中看到答案,手指交叉。
自从:
retainCount 方法是不可预测的,并且
自动释放池在解码后不会删除未保留的对象,本文指出解码后的对象是自动释放的,必须保留。
什么是完全释放我的解码对象的有保证的方法?
我已经从使用 NSCoder 编码中带回了一个根对象,并且不知道如何内存管理这个返回的对象。我用一个自动释放池包围了它,但是这个对象并没有随池一起出去。代码在这里,见第 289 行代码可能会随着 Git Hub 提交而改变,但最终你会在工作代码中看到答案,手指交叉。
自从:
retainCount 方法是不可预测的,并且
自动释放池在解码后不会删除未保留的对象,本文指出解码后的对象是自动释放的,必须保留。
什么是完全释放我的解码对象的有保证的方法?
您正在管理从NSKeyedArchiver.
您要么需要显式保留它,并在完成后调用 release,要么立即使用它——例如写入文件。
我建议重新熟悉一下Objective-C 的内存管理规则
手动内存管理一开始有点棘手,但是一旦你掌握了规则,它就会让这种情况很容易解决。
现在,如果您需要确保立即删除内存,则需要编写自己的二进制序列化程序,该序列化程序将遵循 alloc:init 模式,以便调用者明确拥有内存。这样,当您在对象上调用 release 时,它将被释放。
NSCoder 不属于该发布池。