gpt4 book ai didi

objective-c - 尽管故意过度释放,对象的保留计数永远不会低于 1

转载 作者:行者123 更新时间:2023-12-03 16:23:09 24 4
gpt4 key购买 nike

我正在检查一些对象的保留计数

NSLog(@"r = %d", [aObject retainCount];

看来我能得到的最低值是“r = 1”,即使我故意添加额外的“release”调用

[aObject release];

即使我尝试将“release”和“NSLog”测试代码放入对象的 dealloc 方法中,“r = 1”限制仍然成立。

Cocoa 运行时似乎忽略了我在“r = 1”之前的额外版本,然后在示例程序的最后(没有 GC)因“EXC_BAD_ACCESS”而崩溃。

我唯一的解释(猜测)是我们需要 r >= 1 才能访问对象。 Cocoa 运行时只是试图避免让任何对象的保留计数过早变为 0。

如果我错了,有人可以确认或更正我吗?

最佳答案

当一个对象的保留计数即将达到 0 时(即它的保留计数为 1,并且再次调用了release),它会被释放,而不是最后进行减量。

关于objective-c - 尽管故意过度释放,对象的保留计数永远不会低于 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927613/

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