2011-10-28 83 views
1

這是我的片斷:爲什麼這個RELEASE不會產生RUNTIME ERROR?

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 

謝謝。

回答

4

你只是幸運的是釋放的內存沒有被其他東西重用並被覆蓋。否則,它會失敗。

運行你NSZombieEnabled一套應用YES並且應該提高在運行時的錯誤。

1

當您釋放Foo對象時,它先前分配的內存被釋放,但這並不一定意味着該內存塊中的數據被「清除」。在這種情況下,myFooTwo指針仍指向有效的Foo數據。

這並不總是如此。

相關問題