#define 宏定义的黑魔法

Xcode 编程,Objective-C 宏定义

/*1. 让宏定义有提示

#define kClassAttributeString(objc, path) objc.path
>1.分析宏定义的本质是,每输入一个字母,就进行拷贝翻译成后面的形式

>2.所以当我们第第一个参数 输入 self 的时候,翻译 成 代码就是  self.   那么后面就会有提示,也就是输入宏定义的 path参数的时候,其实代码是就已经变成了 self.  什么 那么path 就自然有提示了

*/

/*2. 得到属性的 C 字符串

#define kClassAttributeString(objc, path) (objc.path, #path)

>1这里我们想得到的是 属性的 字符串 可以使用 宏定义中的 #  这个表示后面的参数变成""  的C字符串,然而我们又想有提示,那么就使用 逗号运算符号  ,  表示最右边的是结果

*/

/*3. 忽略掉 , 逗号运算的前面的东西,让编译的时候不报警告

#define kClassAttributeString(objc, path) ((void)objc.path, #path)

>1但是我们想忽略掉前面的参数,因为那些用宏定义会变成  (self.view.frame, "frame")  但是 self.view.frame 是一个get方法,没有接受的容器,会报警告,那么我们可以使用(void)忽略掉

*/

/*4. 加入 @ 得到 OC 字符串

#define kClassAttributeString(objc, path) @(((void)objc.path, #path))

也可以这样写

#define kClassAttributeString(objc, path) ((void)objc.path, @#path)

>1加上 @ 得到OC的字符串

*/

//运用到KVO,KVC 能够拿到属性的字符串表示,又可以有提示

#define kClassAttributeString(objc, path) @(((void)objc.path, #path))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值