2015-01-14 33 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所以我不必每次都想寫保存self引用的類的名字。所以,現在我的代碼看起來是這樣的:

__weak typeof(self) safeMe = self; 

,但爲什麼我們避免*這裏?它不應該是對self的引用嗎?我們通過避免*在這裏存儲什麼?

我不知道我是否缺少某些東西,但我無法理解這一點。

回答

2

這與所有權說明符沒有任何關係。只是typeof(self)已經是一個指針,因爲self的類型是「指向GWTSDemandContactsController的指針」,即GWTSDemandContactsController *。完全寫出的類型包括*

指向的對象GWTSDemandContactsController,但變量self是指向該對象的指針。

+0

謝謝,很好的解釋!我想我明白了。所以'typeof(self)'就像是寫'GWTSDemandContactsController *'(包含'*')?這就是你的意思嗎? –

+0

是的,就是這樣。 –

+0

謝謝,簡直難以置信! –

相關問題