iOS runtime学习

一直来搞iOS开发都是在学习Cocoa 框架,最近很多人说到iOS的runtime、runloop等cocoa的底层特性,也就想去学习加深自己对cocoa的理解。

最近就看了下runtime的一些知识,突然给了我一个惊喜!!一直来我都在为运营提出的需求,banner点击界面随便跳转而烦恼,在看runtime的时候发现竟然可以用runtime,瞬间喜出望外了。

要使用runtime特性,首先要引入 #import<objc/runtime.h> 类库

打开苹果runtime文档 会发现有很多惊喜等着你~~~

界面随便跳转 的做法可以看看这个,很好的一个东西!而且 发现 我们推送也可以用runtime来跳转东西,以前在推送接受里面写了一大推代码~~

打开这里 可以看到关于runtime的详细介绍;(下面记录一些runtime属于对oc的比较,详细的请看前面的文章)

1、Selector 在runtime中的定义 : typedef struct objc_selector *SEL;  使用SEL sel = @selector(xxxxx);

2、object-c 调用对象的方法,在runtime中 就是个Message(消息);

      [self getNameForKey:key] 在runtime会变异成 objc_msgSend(self,@selector(xxxx),key) ;

3、IMP是指向方法实现的函数指针; typedef id (*IMP)(id self, SEL _cmd,...) 

objc_msgSend的函数定义:id objc_msgSend(id slef,SEL sel, ...)

了解了一些基本的东西,就是要进入实用了。

一直来我也认为objectc category没有办法写属性,但是runtime可以做到这点~ runtime中是才用了键值关联

像正常定义的样子,定义一个属性,比如:定义一个name的属性,实现它的get set方法

#pragma mark - getter && setter

- (NSString *)name {

    return objc_getAssociatedObject(self,&nameKey);

}

- (void)setName:(NSString *)name {

    objc_setAssociatedObject(self, &nameKey, name,OBJC_ASSOCIATION_COPY_NONATOMIC);

}

name 需要@dynamic来修饰,代表着自己手动实现get set方法

objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) 第一个参数object 就是当前的对象,最后个参数是关联策略,对于key,一般来说定义成一个静态变量,static变量是放在静态存储区,应用结束系统自己收回,而且不容易造成冲突。。

object-c runtime很强大,其他的东西大家有兴趣可以到官网上面去看看。说的比较浅显,不对的地方请指正,谢谢~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值