为什么这个RELEASE不会产生RUNTIME ERROR?

时间:2011-10-28 12:49:09

标签: ios objective-c memory-management

这是我的代码:

  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

感谢。

2 个答案:

答案 0 :(得分:4)

您很幸运,释放的内存未被重复用于其他内容并被覆盖。否则,它会失败。

NSZombieEnabled 设置为 YES 的情况下运行应用程序,它应该在运行时引发错误。

答案 1 :(得分:1)

当您释放Foo对象时,它先前分配的内存被释放,但这并不一定意味着该内存块中的数据被“清除”。在这种情况下,myFooTwo指针仍然指向有效的Foo数据。

情况并非总是如此。