2015-01-14 3 views
1

Я искал немного о разнице между __weak и __blockПочему использование typeof() для создания слабой ссылки не требует указателя звездочки?

Мой старый код был что-то вроде этого:

__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? Что мы храним здесь, избегая *?

Я не знаю, не хватает ли я чего-то или нет, но я не мог этого понять.

ответ

2

Это не имеет никакого отношения к спецификаторам собственности. Просто typeof(self) уже является указателем, потому что тип self является «указателем на GWTSDemandContactsController», то есть GWTSDemandContactsController *. Полностью выписанный тип включает *.

Объект указал является GWTSDemandContactsController, но переменная self указатель на этот объект.

+0

спасибо, приятно описание! Думаю, я это понял. Итак, 'typeof (self)' похоже на запись 'GWTSDemandContactsController *' (с включенным '*')? Это то, что вы имеете в виду? –

+0

Да, это точно. –

+0

Спасибо, не могу поверить, что это было так просто! –

Смежные вопросы