天天看點

iOS開發中使用宏定義提高開發效率

Feb 02 2012

http://tangchuanyao.com/20120202224/

作者:tc_yao   釋出:2012-02-02 09:21   分類:iOS進階篇   閱讀:658 views   搶沙發  

iOS開發中,巧妙的使用宏定義,可以提高開發效率,本篇簡單介紹一下宏的定義,設定,應用,并在未來實踐中不斷追加一些常用的宏定義。

調試Log

iPhone應用程式開發調試的時候,在代碼中加入NSLog的暴力調試方法是很頻繁的,但是在release的時候要删除這些調試代碼,那工作量是煩躁,這樣的情況下,試用宏就會顯得非常的友善。 看下面的例子:

#ifdef DEBUG
 #define LOG(...) NSLog(__VA_ARGS__);
 #define LOG_METHOD NSLog(@"%s", __func__);
#else
 #define LOG(...);
 #define LOG_METHOD;
#endif
           

像上面例子這些宏,ProjectName_Prefix.pch中追加之後,不用import就能直接在工程的檔案中直接試用了。

iOS開發中使用宏定義提高開發效率
iOS開發中使用宏定義提高開發效率

預設情況下,在工程設定的Macros裡已經有DEBUG的設定參數的,如果需要添加其他參數的話,就在Xcode的工程設定裡設定相對應的參數:

  1. 1.打開工程設定
  2. 2.「TARGETS」下選擇設定對應工程「Build Setting」
  3. 3.「XXX – Preprocessing」選項下的「Preprocessor Macros」項目的「DEBUG」中追加對應的參數
iOS開發中使用宏定義提高開發效率

這樣設定以後,調試log的代碼段隻會在debug的時候才有效。 另外使用方法的話,就是用定義的LOG方法去替代NSLog方法,想打出函數名的log就使用LOG_METHOD。 例:

LOG(@"Data:%@",str);
LOG_METHOD
           

大家可以根據項目的需要添加各種log處理的形式,這樣就友善許多了。

#ifdef DEBUG
 #define DNSLogPoint(p) NSLog(@"%f,%f", p.x, p.y);
 #define DNSLogSize(p) NSLog(@"%f,%f", p.width, p.height);
 #define DNSLogRect(p) NSLog(@"%f,%f,%f,%f", p.origin.x, p.origin.y, p.size.width, p.size.height,);
#else
 #define DNSLogPoint(p);
 #define DNSLogSize(p);
 #define DNSLogRect(p);
           

其他應用

除了DEBUG,有時候有很多的配置用宏的話,寫代碼也沒有那麼煩躁,比如說Google Analytics的設定

#define GA_TRACKPAGE(PAGE) { NSError *error; if (![[GANTracker sharedTracker]trackPageview:[NSString stringWithFormat:@"/%@", PAGE] withError:&error]) { LOG(@"%@",error.helpAnchor); } LOG(@"GA /%@", PAGE); };
#define GA_TRACKEVENT(EVENT,ACTION,LABEL,VALUE) { NSError *error; if (![[GANTracker sharedTracker] trackEvent:EVENT action:ACTION label:LABEL value:VALUE withError:&error]){ LOG(@"%@",error.helpAnchor); } LOG(@"GA %@/%@/%@", EVENT, ACTION, LABEL); };
#define GA_TRACK_CLASS GA_TRACKPAGE(NSStringFromClass([self class]));
#define GA_TRACK_METHOD GA_TRACKEVENT(NSStringFromClass([self class]),NSStringFromSelector(_cmd), @””, -1); }
           

多行表示的寫法

?

1 2 3 4 5

//改行

#define ReloadBarButton [[[UIBarButtonItem alloc] initWithImage:ReloadBarButtonIcon \

style:UIBarButtonItemStylePlain \

target:self \

action:@selector(ContentsReload:)] autorelease]

本文固定連結: http://tangchuanyao.com/20120202224/ | 一路向前