为什么Objective-C对象在被解除分配后仍然存在?

Luc*_*ugh 2 memory-leaks memory-management objective-c

我这里有这个代码......

#import <Foundation/Foundation.h>
#import "Chip.h"

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

    Chip *chip = [[Chip alloc] init];

    [chip release]; //Chip should be gone

    NSLog(@"%@", chip);

    [pool drain];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么在芯片发布后打印出来仍然给我描述.此时是否应该删除?

wal*_*lky 5

chip 正在消失.你只是和它的鬼说话.

添加dealloc记录呼叫的覆盖.您应该看到释放按预期发生.该对象被释放,但没有其他任何事情发生在垃圾桶中,并且你的电话不会侵入它会造成麻烦的地方.

  • 在被解除分配时,由芯片占用的存储器被OS标记为可用于将来的分配.没有其他东西出现,所以没有别的东西可以得到它.Dealloc不清楚记忆.对C中的解除分配指针的访问具有未定义的效果,并且不需要抛出任何类型的异常.您可能在该段内存中拥有其他内容,因此您的程序仍可访问整个批次.存储器倾向于以例如4kb的块的形式拥有,因此MMU不需要不合理的存储量来进行门禁访问. (3认同)