__block
:支持MRC & ARC。應該是提升了變量的作用域,使得在 block 內部和外部所訪問的是同一個變量。
__weak
:支持ARC。主要用於在block中避免循環引用。
__strong
:支持ARC。作用類似Retain,可以跟__weak配合,保證在block範圍內變量可用。(參考AFNetworking 源碼)
__weak __typeof(self)weakSelf = self; self.backgroundTaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^{ __strong __typeof(weakSelf)strongSelf = weakSelf; if (handler) { handler(); } if (strongSelf) { [strongSelf cancel]; [application endBackgroundTask:strongSelf.backgroundTaskIdentifier]; strongSelf.backgroundTaskIdentifier = UIBackgroundTaskInvalid; } }];
typeof
、__typefo
、__typeof__
:帶下劃線的兩種是舊的c編譯器支持的擴展方式,而不帶下劃線的是現代編譯器支持的方式,目前大部分編譯器都已支持該方式。clang編譯器一樣支持。
__unused
:gcc編譯器宏定義__attribute__((unused))
的縮寫,目的是告訴編譯器,如果該參數或變量沒有被使用,也不要報warning。