gpt4 book ai didi

objective-c - 使用 decodeObjectForKey : 时理解 retainCounts

转载 作者:行者123 更新时间:2023-11-28 19:20:24 26 4
gpt4 key购买 nike

我有一个奇怪的情况,我希望有人能解释一下。我在自定义对象中实现 NSCoding 协议(protocol),但在 initWithCoder: 中遇到了内存泄漏。我有这样的东西:

NSString* titleTemp = [aDecoder decodeObjectForKey:@"title"];
if(titleTemp) {
[self setTitleString:titleTemp];
} else {
[self setTitleString:[NSString string]];
}

我有这个对象的许多其他属性,一些是数组、一些字符串和一些基元( double 、整数),而且我一直在这个方法中遇到内存泄漏。 Instruments 告诉我泄漏发生在 decodeObjectForKey: 行的每次解码中。当您在 10 多个对象的数组中泄漏每个自定义类中的每个解码对象时,内存开始增加。

但真正难倒我的是这段代码的输出:

NSString* titleTemp = [aDecoder decodeObjectForKey:@"title"];
NSLog(@"%i", titleTemp.retainCount);

是“3”!

哇哦,那么多保留下来的东西是从哪里来的?打败我。但我很想知道所有这些泄密事件。谢谢!

最佳答案

Woah, where are all of those retains coming from?

很难说您是否看不到执行保留的代码,但只要它不是您的代码,您就不必担心。 -decodeObjectForKey: 很有可能实际上调用了其他几个方法来创建字符串,并且其中任何一个都可能保留并随后自动释放该字符串。

Beats me. But I'd love to know with all these leaks.

与其尝试使用 -retainCount 查找泄漏,不如查看泄漏的对象。仪器可以帮助您做到这一点。确保您正在平衡这些对象的保留(当然还有分配、复制和新建)和释放。如果您过度保留或释放一个对象,就会导致泄漏。如果您无法控制的某些代码正在执行此操作,那么您无论如何也无能为力。

关于objective-c - 使用 decodeObjectForKey : 时理解 retainCounts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9356691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com