一些阅读笔记关于宏

阅读以下几篇文章有感

http://tutuge.me/2015/03/11/Effective-Objective-C-%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0-Item-4-%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%AE%9A%E4%B9%89%E5%B8%B8%E9%87%8F/

http://tutuge.me/2015/03/15/%E6%9C%89%E5%85%B3%E5%AE%8F%E5%AE%9A%E4%B9%89%E7%9A%84%E7%BB%8F%E9%AA%8C%E4%B8%8E%E6%8A%80%E5%B7%A7-%E7%AE%80%E5%8C%96%E4%BB%A3%E7%A0%81-%E5%A2%9E%E5%BC%BALog/

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

你可能感兴趣的:(一些阅读笔记关于宏)