Bu RELEASE neden RUNTIME ERROR üretmiyor?

Bu benim snippet'ım:

  Foo *myFooOne = [[Foo alloc] initWithName:@"my string"];
  Foo *myFooTwo = myFooOne;

  [myFooOne release];

  NSLog(@"Name: %@", myFooTwo.name);

myFooTwo.name neden çalışma zamanı hatası yerine doğru çıktı üretir?

2011-10-28 14:45:10.718 Example[6410:f803] Name: my string

Teşekkürler.

1

2 cevap

Serbest bırakılan belleğin başka bir şey için yeniden kullanılmadığı ve üzerine yazıldığından dolayı şanslısınız. Aksi takdirde, başarısız olur.

Uygulamayı NSZombieEnabled ile EVET olarak ayarlayın ve çalışma zamanında bir hata oluşturmalıdır.

4
katma

Foo nesnesini serbest bıraktığınızda, önceden ayrılmış olan bellek boştur, ancak bu, bu bellek bloğundaki verilerin "temizlendiği" anlamına gelmez. Bu durumda myFooTwo işaretçisi hala geçerli Foo verilerini işaret ediyor.

Bu her zaman böyle olmaz.

1
katma