gpt4 book ai didi

objective-c - 向已释放的对象发送消息正在工作

转载 作者:行者123 更新时间:2023-12-03 17:28:31 25 4
gpt4 key购买 nike

Objective-C 中最简单的代码会导致奇怪的行为:

#import Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

NSObject *obj = [[NSObject alloc] init];
NSLog(@"retain count %d",[obj retainCount]);//print 1
[obj release];//obj deallocated
NSLog(@"retain count %d",[obj retainCount]); //still printing 1 in Snow Leopard! Why??


[pool drain];
return 0;
}

第二个NSLog()应该打印“消息retainCount发送到释放对象=0x103eb0”。如果您使用 Leopard,一切正常,但在 Snow Leopard 中,第二个 NSLog 仍然打印 1

这是 Snow Leopard 版本 Xcode 中的错误吗?

最佳答案

参见this问题。

这不是一个错误。一旦释放了保留计数为 1 的对象,objc 运行时只需调用dealloc,而不会减少保留计数。一直都是这样。此外,仅仅因为一个对象已被发送dealloc并不意味着它在堆上的数据会立即被销毁。它只是被标记为稍后销毁。

关于objective-c - 向已释放的对象发送消息正在工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575819/

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