iOS开发 runtime使用场景

本文深入探讨了Objective-C运行时的核心特性,包括消息发送机制、获取类的所有方法及属性、方法交换(AOP)、通过分类添加成员变量的具体实现方式,以及KVC和归档的底层原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.归档的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值