閱讀以下幾篇文章有感
http://onevcat.com/2014/01/black-magic-in-macro/
Effective-Objective-C 第一宜猜、第二章
首先寫一些常量定義的時候策吠,用宏并不是太好腕铸。
而應(yīng)該用如下的靜態(tài)常量
static const 類型 名稱 = 值;
可以用在方法內(nèi)膝擂,或者.m里面
對于NSNotification的統(tǒng)一定義這么寫
//xxxClass.h
extern NSString * const xyzNotification;
//xxxClass.m
NSString * const xyzNotification = @"xyzNotification";
寫線程鎖的時候
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
//code
});
dispatch_once_t必須是static的月而,否則報錯。
dispatch_once的第一個參數(shù)必須取onceToken的地址,就是要“&onceToken□逵鳎”
那么這時候可以用宏定義
#define DISPATCH_ONCE_BLOCK(onceBlock) static dispatch_once_t onceToken; dispatch_once(&onceToken, onceBlock);
DISPATCH_ONCE_BLOCK(^{
//code
})
多線程
//在Main線程上運行
#define DISPATCH_ON_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);
//在Global Queue上運行
#define DISPATCH_ON_GLOBAL_QUEUE_HIGH(globalQueueBlocl) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), globalQueueBlocl);
#define DISPATCH_ON_GLOBAL_QUEUE_DEFAULT(globalQueueBlocl) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);
#define DISPATCH_ON_GLOBAL_QUEUE_LOW(globalQueueBlocl) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), globalQueueBlocl);
#define DISPATCH_ON_GLOBAL_QUEUE_BACKGROUND(globalQueueBlocl) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), globalQueueBlocl);
//主線程上
DISPATCH_ON_MAIN_THREAD(^{
//更新UI
})
//Global Queue
DISPATCH_ON_GLOBAL_QUEUE_DEFAULT(^{
//異步耗時任務(wù)
})
所以工欲善其事葱椭,必先利其器,去改項目去了口四。
簡書已經(jīng)棄用孵运,歡迎移步我的小專欄:
https://xiaozhuanlan.com/dahuihuiiOS