iOS開發常用的巨集

weixin_34138377發表於2016-07-22
  • 很久沒寫了,今天一下子看到一個人關注小小的激動一下

適配螢幕尺寸的巨集

  • 根據不同的iPhone尺寸寬高來設定大小,UI常常用iPhone6來設定尺寸,為了適配定義的巨集:
#ifndef W_H_
#define W_H_
#define  SCREENWIDTH ([UIScreen mainScreen].bounds.size.width)
#define  SCREENHEIGHT ([UIScreen mainScreen].bounds.size.height)

// 依照iPhone6的尺寸設計
#define GETPIXEL (SCREENWIDTH / 375)
#define AUTOLAYOUTSIZE(size) (size * GETPIXEL)

#endif
  • 解釋: 做成了程式碼塊和加了巨集保護,根據iPhone手機的尺寸顯示按比例來的尺寸

RGB

  • UI給我們的常常是RGB顏色,所以需要我們轉換一下:
#define RGBCOLOR(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]

巨集列印

  • 顯示類名,行號,不然常常不知道自己的列印在哪裡:
#define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d  \t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
  • 解釋: fprintf是C/C++的一個格式化庫函式,fprintf()函式根據指定的format傳送引數到stream(流)指定的檔案,fprintf()只能和printf()一樣工作,fprintf()的返回值是輸出的字元數,傳送錯誤時返回一個負值
  • FILF: 當前資料夾的路徑,取lastPathComponent最後一個元件就成了類名
  • LINE: 當前執行的程式碼的行號數字
  • VA_ARGC(variadic macros): 可變引數巨集,讓巨集NSLog可以接收多個引數

因為markdown的原因__打不出來,大家注意一下咯

Debug列印,Release不列印:

// 在 "Target > Build Settings > Preprocessor Macros > Debug" 裡有一個"DEBUG=1"。
//設定為Debug模式下,Product-->Scheme-->SchemeEdit Scheme設定Build Configuration成Debug時,就可以列印nslog了。設定Release,釋出app版本的時候就不會列印了,提高了效能
#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d  \t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(...)
#define debugMethod()
#endif

相關文章