iOS 使用宏定义函数和代码块
iOS使用宏定义函数和代码块
今天在开发过程中碰到一个问题:就是父类中要向外发送通知,然后子类中或者其他类中来接收它。当然一般是把它写到类方法中去,但是有个问题,就是如果调用的类不是它的子类,就不能直接调用,当然也可以采用静态方法实现,我这里主要是想用宏定义来实现,下面我分别介绍使用宏定义函数和定义代码块的方式进行,废话不多说了,直接上代码:
- 使用宏定义函数实现
//定义
#define SendNotification @"SendNotification"
#define sendMessage(msg) \
({\
dispatch_async(dispatch_get_main_queue(), ^{\
NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];\
[notificationCenter postNotificationName:SendNotification object:nil userInfo:@{@"msg":msg}];\
});\
})
//使用
sendMessage(@"发个消息试试");
//有返回的宏函数定义
#define getSum(a,b) \
({\
(a+b);\
})
//使用
double sum = getSum(M_PI,M_E);
- 使用宏定义代码块实现
//定义
#define SendNotification @"SendNotification"
#define sendMessage(msg) \
^(){\
dispatch_async(dispatch_get_main_queue(), ^{\
NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];\
[notificationCenter postNotificationName:SendNotification object:nil userInfo:@{@"msg":msg}];\
});\
}()
//使用
sendMessage(@"发个消息试试");
//有返回的宏代码块定义
#define getSum(a,b)\
^(){\
return a+b;\
}()
//使用
double sum = getSum(M_PI,M_E);
- 写在最后,当时写的时候,想到了使用宏定义的方式,但是在网上找了一圈没有找到怎么使用宏来定义代码块和函数,于是自己通过尝试实现了,所以在这里Mark一下,希望能够帮到遇到同样问题的人,也为了以后自己忘了能够查到。
iOS 使用宏定义函数和代码块的更多相关文章
- C 语言宏定义函数编写时 do-while 的妙用和一些注意事项
在 C 语言中,我们都知道可以用宏定义来编写函数,一般称为宏函数.如果一个宏函数比较复杂,那么在编写这样的宏函数是有一定技巧和注意事项的.文章给出一些我认为值得关注的地方,以及一些注意事项(个人建议) ...
- C语言宏定义和宏定义函数
要写好C语言,漂亮的宏定义是非常重要的.宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等. 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定 ...
- iOS常用宏 定义
总结了iOS开发过程中的一些常用宏,以后会陆陆续续添加进来. 字符串是否为空 1 #define kStringIsEmpty(str) ([str isKindOfClass:[NSNull c ...
- iOS 用宏定义写一个单例(Singleton)
用如下方法定义单例 @interface singleton_interface(ClassName); @end 实现单例在 @implemention singleton_implemention ...
- iOS常用宏定义--实用
在这里给大家分享一些常用的宏定义,喜欢的小伙伴可以直接在项目中使用(持续更新)!为了大家使用方便,请点击GitHub - 宏定义头文件下载 ! 1.获取屏幕宽度与高度 #define SCREEN_W ...
- iOS常用宏定义大全
宏定义与常量的区别 宏:只是在预处理器里进行文本替换,不做任何类型检查,宏能定义代码,const不能,多个宏编译时间相对较长,影响开发效率,调试过慢,const只会编译一次,缩短编译时间. 所以在使用 ...
- iOS常用宏定义
转发:https://www.douban.com/note/486674206/ #ifndef MacroDefinition_h#define MacroDefinition_h //----- ...
- iOS重用宏定义
iOS 多快好省的宏(转) 原文地址:http://my.oschina.net/yongbin45/blog/150149 // 字符串: #ifndef nilToEmpty #define ni ...
- (转)iOS 常用宏定义
#ifndef MacroDefinition_h #define MacroDefinition_h //-------------------获取设备大小------------------- ...
随机推荐
- 巨蟒python全栈开发flask目录
预习1: 1.FlaskWeb框架: https://www.cnblogs.com/DragonFire/category/1246076.html 人工智能技术应用: https://www.cn ...
- coursera 《现代操作系统》 -- 第七周 存储模型(1)
虚拟地址 隔离进程,便于管理. 问:为什么不直接划分物理地址为一块一块,直接管理,而要做一层虚拟地址的映射呢? 栈和堆 Differences between Stack and Heap Stack ...
- python系列七:Python3字典dict
#!/usr/bin/python #Python3 字典#字典是支持无限极嵌套的citys={ '北京':{ '朝阳':['国贸','CBD','天阶','我爱我家','链接地产 ...
- iOS 关于多线程的一些基本概念
一 什么是进程 进程是在系统中正在运行的应用程序!普通的应用程序并不是进程,只有正在运行的应用程序才是一个进程, 在系统中每个进程之间是相互独立的,每个进程均在其专享的且受保护的内存空间内.但是一个应 ...
- ASP-Command-SQL格式
conn.open constrSet c=Server.CreateObject("ADODB.Command")With cSet .ActiveConnection = co ...
- HAProxy的访问控制
HAProxy的ACL用于实现基于请求报文首部.响应报文的内容或其他的环境状态信息来做出转发决策,这大大增强了其配置弹性,其配置法则通常分为两步,首先去定义ACL,即定义一个测试条件,而后在条件得到满 ...
- Linxu下jenkins部署和基本配置
一.OpenJdk1.8安装(tomcat 和 jenkins都依赖与java) ubuntu apt-cache search openjdk #使用apt-cache搜索可以直接使用 ...
- python基础23 -----进程和线程
一.进程 1.什么是进程? 1.1 进程就是一个程序在一个数据集上的一次动态执行过程.进程一般由程序.数据集.进程控制块三部分组成. 1.2 程序是指进程需要完成那些功能以及如何完成. 1.3 数据集 ...
- vim插件快捷键
@1:winmanager: #1:打开winmanager的快捷键在.vimrc中配置,默认为":WMToggle",使用nmap可以将其映射到其他的命令. #2:netrw快捷 ...
- win10 chrome 调试
下载NPAPI版本的flash player: http://www.adobe.com/support/flashplayer/debug_downloads.html#fp13 禁 ...