Чому цей ВИПУСК не видає RUNTIME ERROR?

Це мій фрагмент:

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

  [myFooOne release];

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

чому myFooTwo.name правильно виводить, а не помилку під час виконання ?

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

Дякую.

1

2 Відповіді

Вам просто пощастило, що випущена пам'ять не була використана для чогось іншого і була перезаписана. Інакше це буде невдалим.

Запустити додаток за допомогою NSZombieEnabled встановити на YES , і воно повинно викликати помилку під час виконання.

4
додано

Коли ви випускаєте об'єкт Foo, раніше виділена пам'ять звільняється, але це не обов'язково означає, що дані в цьому блоці пам'яті «очищені». У цьому випадку покажчик myFooTwo все ще вказує на дійсні дані Foo.

Це не завжди може бути справою.

1
додано
IT KPI iOS
IT KPI iOS
74 учасників

Чат обсуждения IOS. - Оффтоп, флуд, оскорбления и вбросы здесь не приняты. - За нарушение - предупреждение или mute на неделю. - За спам и рекламу - ban. Все чаты IT KPI: https://t.me/itkpi/602

ios_jobs_ua
ios_jobs_ua
27 учасників

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.