阅读以下几篇文章有感
http://onevcat.com/2014/01/black-magic-in-macro/
Effective-Objective-C 第一、第二章
首先写一些常量定义的时候,用宏并不是太好。
而应该用如下的静态常量
static const 类型 名称 = 值;
可以用在方法内,或者.m里面
对于NSNotification的统一定义这么写
//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的第一个参数必须取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(^{
//异步耗时任务
})
所以工欲善其事,必先利其器,去改项目去了。
简书已经弃用,欢迎移步我的小专栏:
https://xiaozhuanlan.com/dahuihuiiOS
网友评论