gpt4 book ai didi

ios - iOS Objective-C,释放对象后具有相同的内存地址

转载 作者:行者123 更新时间:2023-12-01 18:50:02 26 4
gpt4 key购买 nike

我正在学习Objective-C手动内存管理。我有以下示例:

int main(int argc, const char * argv[]) {
@autoreleasepool {
NSObject *o = [[NSObject alloc] init];
NSLog(@"%@", o);
[o release];
NSLog(@"%@", o);

}
return 0;
}

该代码的输出为:
2015-07-31 16:18:34.694 test[2378:96008] <NSObject: 0x10020d110>
2015-07-31 16:18:34.696 test[2378:96008] <NSObject: 0x10020d110>

在调用“发布”对象之后,内存中仍然存在对象(与调用“发布”之前的地址相同),并且NSLog不会给我EXC_BAD_ACCESS异常,这是怎么可能的?

最佳答案

这是因为即使您已释放对象,o仍指向0x10020d110

发布对象不会将对该对象的引用更改为nil,但是它们是无效的,并且如果您尝试通过引用发送消息,则会发生未定义的行为。

对于您而言,它不会崩溃,因为两个NSLog()调用都在调用[o description]

关于ios - iOS Objective-C,释放对象后具有相同的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31748496/

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