en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

7.01.2013

善用 #pragma mark Preprocessor 整理你的程式碼

如果你常使用專案樣板製作你的專案, 那麼 #pragma mark 這個前端處理程式你一定不會感到陌生,它是一個存在於 Clang(LLVM)編譯器中的輔助工具,就如字面上的意思它提供你整個程式碼區段一個標籤,好像你將來在重新檢視你的程式碼時,可以很快的找到你要的函式。


pragma mark
舉個簡單的例子,假設我們將目前這個 Class 下的函式歸類成以下幾個類別,並在對應的 #pragma mark 下鍵入相對應個函式,其架構如下。
#pragma mark - 釋放
- (void)dealloc {
    [super dealloc];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}


#pragma mark - 主要執行序
- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)viewDidUnload {
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}


#pragma mark - 等待事件
- (void)setObservationInfo:(void *)observationInfo {}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {}


#pragma mark - 觸碰事件
- (IBAction)onButton:(id)sender {}

- (IBAction)onDoubleClik:(id)sender {}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {}

@end

當我們需要快速檢視這些分類時,就可以由上方的檔案導覽列得知目前所有標籤下面的函式名稱。

在導覽列中檢視 pragma mark

ps:可以單純使用下列指令來製作沒有標籤的分隔線。
#pragma mark -


其他相關的輔助工具
在 Clang(LLVM)編譯器中還存在這許多好用的輔助工具來幫助你撰寫程式碼,像是使用 #error 標籤來製作一個類似錯誤的註記來防止誤觸編譯器的執行,或是使用 #warning 製作警告註記等等。
自訂的錯誤語警告註記

或是在審閱程式碼時使用相關的註解來輔助,這些註解同樣都可以從編輯器上方的導覽列檢視與切換。
///FIXME:等待修復的bug
///TODO: 等待撰寫的code
///???: 這邊還沒看懂做什麼
///!!!: 這邊也許會有問題
///MARK: 註記


使用導覽列快速檢視切換註記
ps:上述註記在 Block 區塊中不會產生效果。

另外,Clang(LLVM)編譯器還有提供更進階的輔助功能,像是關閉特定的錯誤或是警告等等,有興趣的朋友們可以參考Clang 的使用者手冊(Clang 3.4 documentation)






6 則留言:

  1. 匿名7/07/2013

    很棒的教學

    回覆刪除
    回覆
    1. 您好:

      謝謝指教!

      刪除
  2. 匿名7/11/2013

    blogspot大陸這邊被禁掉了,所以在家看不了這個博客。我只能在公司閑下來的時候來逛逛。
    特地來留言表達一下對樓主的崇拜之情。非常非常好的技術博客~
    提個建議,樓主可否在閒暇時間更新一些有關內存調優方面的講解呢?如果能的話,最好了~~

    回覆刪除
    回覆
    1. 您好:

      原來被禁掉了喔,之前我們也考慮寫在微博上在上,只是還是沒有使用google部落格來的方便,非常謝謝你的支持。

      內存優化方面,我們也考慮過,不過目前iOS已經啟用arc機制,我們這邊很多東西都還需要再重新做整理,加上xcode本身就有工具可以幫你檢視內存等使用量,所以目前這部份的資料就沒有這麼多^^",謝謝你的建議。

      刪除
  3. 關於"其他相關的輔助工具"這部份似乎無法在 Block 內部使用

    回覆刪除
    回覆
    1. Darktt 您好

      感謝您的提醒!

      刪除