#pragma

#pragma聲明主要由Xcode用來完成兩個(gè)主要任務(wù)——整理代碼和防止編譯器警告。

整理代碼

代碼的整潔程度反映了程序員及其代碼的靠譜程度。缺少慣性和一致性的代碼表明作者要么疏忽要么無能,更遭到的是,使得一個(gè)項(xiàng)目難以維護(hù)和協(xié)作。

好的習(xí)慣從#prama mark開始。就像這樣:

@implementation ViewController

- (id)init { 
  ...
}

#pragma mark - UIViewController

- (void)viewDidLoad {
  ...
}

#pragma mark - IBAction

- (IBAction)cancel:(id)sender {
  ...
}

#pragma mark - UITableViewDataSource

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
  ...
}

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  ...
}

在你的@implementation中使用#pragma mark ,將代碼分割成多個(gè)邏輯塊。這些邏輯區(qū)塊不僅使得閱讀代碼本身容易許多,也為Xcode源導(dǎo)航增加了視覺線索。

一個(gè)好的習(xí)慣是將一個(gè)類里面的所有方法根據(jù)它們的來源組合放在一起。比如,來源UITableViewDelegate的所有方法放在一起并在這些方法前加入#pragma mark - UITableViewDelegate標(biāo)注。

防止警告

#pragma mark同樣可以用來防止來自編譯器或者靜態(tài)分析器的警告,這點(diǎn)用的比較少。

比糟糕格式的代碼更煩人的是生成警告的代碼。尤其是第三方類庫的代碼。可是,絕大多數(shù)時(shí)候沒有辦法避免編譯器警告。在某些罕見的場景中,你絕對肯定一個(gè)編譯器異常或者靜態(tài)分析器異常需要被抑制,那么#prama就派上了用場:

// completionBlock在AFURLConnectionOperation中被手動(dòng)的設(shè)置為nil來打破保留周期。
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-retain-cycles"
    self.completionBlock = ^ {
        ... 
    };
#pragma clang diagnostic pop

幸運(yùn)的是,Clang提供了一個(gè)便捷的方法解決了這一切。通過使用#prama clang diagnostic push/pop, 你可以告訴編譯器針對某一特定部分代碼來忽視特定的警告。

你可以在Clang Compiler User's Manual讀到更多關(guān)于#pragma的LLVM用法的知識。

只是不要用這種方法來清掃合法的警告,這會在后續(xù)工作中帶來很大的麻煩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前面一段時(shí)間,不是在忙離職,就是趁著清明跑去放(fu)松(bai)去了,好久了都沒開始真正的寫一寫iOS相關(guān)的...
    redihd閱讀 4,817評論 1 4
  • 作為預(yù)處理指令,#pragma 在編譯時(shí)進(jìn)行計(jì)算。但它并不像如 #ifdef…#endif 之類的宏,#pragm...
    小DB閱讀 831評論 0 2
  • 在所有的預(yù)處理指令中,#Pragma 指令可能是最復(fù)雜的了,它的作用是設(shè)定編譯器的狀態(tài)或者是指示編譯器完成一些特定...
    進(jìn)無盡閱讀 484評論 0 0
  • 哲學(xué)是什么? 這個(gè)問題如何回答,其實(shí)每個(gè)人都有自己關(guān)于哲學(xué)的看法,每個(gè)人都有自己的哲學(xué)觀,因此每個(gè)人都有意或無意地...
    狂奔的蝸牛_eb65閱讀 728評論 0 0
  • 那一聲聲早晚安,是多么蒼白無力。 對于一個(gè)感性的我來說,我又不知如何表達(dá)。 但我也只能說出這樣平淡無味的話。 等,...
    凡夫俗子y閱讀 124評論 5 6

友情鏈接更多精彩內(nèi)容