У чому різниця між цим:
@property (nonatomic, weak) id <SubClassDelegate> delegate;
і це:
@property (nonatomic, assign) id <SubClassDelegate> delegate;
Я хочу використовувати власність для делегатів.
Відповіді:
Єдина відмінність між weak
та assign
полягає в тому, що якщо об’єкт, на який weak
вказує властивість, вивільнений, тоді значення weak
покажчика буде встановлено на nil
, так що ви ніколи не ризикуєте отримати доступ до сміття. Якщо ви використовуєте assign
, цього не станеться, тому, якщо об’єкт буде виведено з-під вас, і ви спробуєте отримати до нього доступ, ви отримаєте доступ до сміття.
Для об’єктів Objective-C, якщо ви перебуваєте в середовищі, де ви можете використовувати weak
, то вам слід використовувати його.
UITableView
має assign
свій делегат:@property (nonatomic, assign) id <UITableViewDelegate> delegate;