typeof & typedef 咋一看上去老像了,但是兩者區別可是很大的哦
一、理解
- typeof 是一個一元運算,放在一個運算數之前,運算數可以是任意類型。
可以理解為:我們根據typeof()括號里面的變量,自動識別變量類型并返回該類型。 - typedef:定義一種類型的別名,而不只是簡單的宏替換。
二、iOS 中的用處
2-1、typeof 常見運用于Block中,避免循環引用發生的問題。
__weak __typeof(self) weakSelf = self;
[weakSelf addFooterWithRefreshingBlock:^{
//do something
[weakSelf.footer endRefreshing];
}
注意: typeof 括號中的值和等于后面的值是相同的類型。
另外有時偷懶也可以用到的,但是我不用,哈哈
__weak typeof(self.contentView) ws = self.contentView;
然后后面就直接用ws
這樣寫啦...
ps: typeof
、__typeof__
、__typeof
的區別
其實它們是沒有區別的,只是它們只是針對不同的 c語言編譯版本 有所不同的。
typeof是現代GNU C++的關鍵字;
從Objective-C的根源說,它其實來自于C語言,所以很多地方使用了繼承自C的關鍵字。
看到AFNetworking 中,用的都是__typeof() ;
2-2、typedef 常用于命名(枚舉和Block)
typedef NS_ENUM(NSInteger, UITableViewStyle) {
UITableViewStylePlain, // regular table view
UITableViewStyleGrouped // preferences style table view
}
typedef void(^YTKRequestCompletionBlock)(__kindof YTKBaseRequest *request);
iOS這塊我們主要是用于枚舉和Block,其他詳細用途可參考:typedef 用法總結。
總之,細心感受它們,不要寫錯了