iOS开发 runtime使用场景

1. 消息

#import <objc/message.h>
#import <objc/runtime.h>
objc_msgSend((id)[Person class], @selector(walk));

2. 获取所有方法,变量

objc_property_t * propertys = class_copyPropertyList(clazz, &outCount);

3. 交换方法(AOP)

[外部链接](http://note.youdao.com/noteshare?id=2ca674adf2eeece8fdd548e3458ef983)

4. 分类添加成员

const char key;
//使用runtime的方法,将分类中的,属性set与get方法进行重写,解决分类中不能够声明成员变量的这个问题
- (void)setExpand:(BOOL)expand
{
    //<#id object#> 传进来的参数与谁关联
    //const void *key 唯一标示
    //id value 关联的内容是什么
    //objc_AssociationPolicy policy 以哪种约束方式进行关联
    objc_setAssociatedObject(self, &key, @(expand), OBJC_ASSOCIATION_ASSIGN);
}
- (BOOL)expand
{
    //把包装类转换成基本数据类型后,在返回
    return [objc_getAssociatedObject(self, &key) boolValue];
}
- (void)spliteView
{
    if((self.expand = !self.expand))
    {
        self.view.transform = CGAffineTransformMakeTranslation(300, 0);
    }
    else
    {
        self.view.transform = CGAffineTransformIdentity;
    }
}

5. kvc的实现

6. 归档的实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容