这是我的代码:
Foo *myFooOne = [[Foo alloc] initWithName:@"my string"];
Foo *myFooTwo = myFooOne;
[myFooOne release];
NSLog(@"Name: %@", myFooTwo.name);
为什么myFooTwo.name
产生正确的输出,而不是runtime error
?
2011-10-28 14:45:10.718 Example[6410:f803] Name: my string
感谢。
答案 0 :(得分:4)
您很幸运,释放的内存未被重复用于其他内容并被覆盖。否则,它会失败。
在 NSZombieEnabled 设置为 YES 的情况下运行应用程序,它应该在运行时引发错误。
答案 1 :(得分:1)
当您释放Foo对象时,它先前分配的内存被释放,但这并不一定意味着该内存块中的数据被“清除”。在这种情况下,myFooTwo指针仍然指向有效的Foo数据。
情况并非总是如此。