Runtime梳理(三)动态的创建类,添加成员变量,方法

Runtime梳理(三)动态的创建类,添加成员变量,方法,第1张

在上一篇KVO的实现中用到了动态的创建类,添加成员变量方法,这一篇说说这些方法的使用。

父类Person

1.动态的创建一个类,用到了下面这个方法:

为这个新创建的类添加方法和成员变量,并且注册这个类。

2.添加成员变量

返回YES,添加成功,返回NO,添加失败,说明该类中已经存在这个名称。它的调用是在 objc_allocateClassPair 之后, objc_registerClassPair 之前,给一个存在的类添加实例变量是不允许的。

我们尝试着给Person添加address

3.添加方法

通过 class_addMethod(Class cls, SEL name, IMP imp, const char *types) 方法添加,参数依次为:添加方法的类,方法名,方法实现,方法参数的描述。

通过这个方法会重写父类的实现,需要改变本类方法实现,通过方法 method_setImplementation .

打印结果:

4.重写本类中的方法

通过方法 method_setImplementation(Method m, IMP imp) 返回类型 IMP ,方法m之前的实现.

打印结果:

在调用study的方法的时候打印的是play的结果,调换了方法的实现。 method_exchangeImplementations(Method m1, Method m2) ,可能也是通过这种方法实现m1,m2的交换。

5.添加属性

打印结果

建立一个Javaproject——点右键新建一个类,类名字最好是大写开头,LZ 我给你写一个简单的类\x0d\x0apublic class Test{\x0d\x0a//定义成员变量\x0d\x0aint width=10\x0d\x0aint height=10\x0d\x0a// 成员方法\x0d\x0apublic area(){\x0d\x0a return width*height \x0d\x0a }\x0d\x0a}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7983213.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存