Я искал немного о разнице между __weak
и __block
Почему использование typeof() для создания слабой ссылки не требует указателя звездочки?
- What is the difference between a __weak and a __block reference?
To ARC or not to ARC? What are the pros and cons?
и обнаружили, что, если я использую ARC, я должен использовать
__weak
ссылки в блоках.
Мой старый код был что-то вроде этого:
__block GWTSDemandContactsController *safeMe = self;
[GWTSService getSuggestedContactsForDemand:self.demand success:^(NSArray *contacts) {
safeMe.activityLoading.hidden = true;
[safeMe setContactsForView:contacts];
} failure:^(NSError *error) {
safeMe.activityLoading.hidden = true;
}];
Затем, когда я мигрировал использовать ARC, я начал использовать __weak
, а также узнал, что я мог бы использовать typeof(self)
Это очень si mple, так что мне не нужно писать имя класса каждый раз, когда я хочу сохранить ссылку self
. Так что теперь мой код выглядит следующим образом:
__weak typeof(self) safeMe = self;
Но почему мы избегаем *
здесь? Разве это не ссылка на self
? Что мы храним здесь, избегая *
?
Я не знаю, не хватает ли я чего-то или нет, но я не мог этого понять.
спасибо, приятно описание! Думаю, я это понял. Итак, 'typeof (self)' похоже на запись 'GWTSDemandContactsController *' (с включенным '*')? Это то, что вы имеете в виду? –
Да, это точно. –
Спасибо, не могу поверить, что это было так просто! –