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就能直接在工程的檔案中直接試用了。

預設情況下,在工程設定的Macros裡已經有DEBUG的設定參數的,如果需要添加其他參數的話,就在Xcode的工程設定裡設定相對應的參數:
- 1.打開工程設定
- 2.「TARGETS」下選擇設定對應工程「Build Setting」
- 3.「XXX – Preprocessing」選項下的「Preprocessor Macros」項目的「DEBUG」中追加對應的參數
這樣設定以後,調試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 | |
本文固定連結: http://tangchuanyao.com/20120202224/ | 一路向前