Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Обратные вызовы и владение объектами Objective-C

0

При использовании обратных вызовов возникает опасность того, что объекты, ожидающий обратных вызовов, не будут уничтожены положенным образом. Из-за этого было решено, что:

•  Центры оповещений не владеют своими наблюдателями. Если объект является наблюдателем, он обычно удаляется из центра оповещений в его методе dealloc:

-­‐    (void)dealloc

{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}

•  Объекты не владеют своими делегатами и источниками данных. Если вы создаете объект,   который   является   делегатом   или   источником   данных,   он   должен

«попрощаться» в своем методе dealloc:

-­‐    (void)dealloc

{

[windowThatBossesMeAround setDelegate:nil]; [tableViewThatBegsForData setDataSource:nil];

}

•  Объектные владеют своими приемниками. Если вы создаете объект, который является приемником. он должен обнулить указатель на приемник в своем методе dealloc:

-­‐    (void)dealloc

{

[buttonThatKeepsSendingMeMessages setTarget:nil];

}

В нашей программе все эти проблемы неактуальны, потому что объект Logger не будет уничтожен до завершения программы. (Кроме того, в этом упражнении я использовал два документированных исключения из правил: NSURLConnection владеет своим делегатом, а NSТimer владеет своим приемником.)

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии