美文网首页
runtime使用

runtime使用

作者: 林希品 | 来源:发表于2023-06-16 09:34 被阅读0次

Objective-C Runtime是iOS开发中非常强大和灵活的工具,它提供了一组C语言接口,用于在运行时进行类和对象的操作。以下是一些Objective-C Runtime的使用场景和示例:

1.动态创建类和对象:

Class newClass = objc_allocateClassPair([NSObject class], "NewClass", 0);
class_addMethod(newClass, @selector(dynamicMethod), (IMP)dynamicMethodImplementation, "v@:");
objc_registerClassPair(newClass);

id newObject = [[newClass alloc] init];

2.方法交换:

Method originalMethod = class_getInstanceMethod([MyClass class], @selector(originalMethod));
Method swizzledMethod = class_getInstanceMethod([MyClass class], @selector(swizzledMethod));
method_exchangeImplementations(originalMethod, swizzledMethod);

3.动态添加属性:

objc_setAssociatedObject(myObject, @"key", associatedObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
id associatedObject = objc_getAssociatedObject(myObject, @"key");

4.方法调用:

[myObject performSelector:@selector(someMethod)];

5.动态获取和修改对象的属性值:

id propertyValue = [myObject valueForKey:@"propertyName"];
[myObject setValue:newValue forKey:@"propertyName"];

6.动态获取和修改类的属性和方法:

objc_property_t property = class_getProperty([MyClass class], "propertyName");
Method method = class_getInstanceMethod([MyClass class], @selector(someMethod));

7.消息发送与动态方法解析:

[myObject performSelector:@selector(nonexistentMethod)];

8.获取类的成员变量:

Ivar ivar = class_getInstanceVariable([MyClass class], "variableName");

9.创建类并添加方法:

#import <objc/runtime.h>

// 定义一个新的类
Class newClass = objc_allocateClassPair([NSObject class], "NewClass", 0);

// 添加一个方法实现
void dynamicMethod(id self, SEL _cmd) {
    NSLog(@"Dynamic method implementation");
}

// 获取方法选择器
SEL dynamicMethodSelector = @selector(dynamicMethod);

// 添加方法到类中
class_addMethod(newClass, dynamicMethodSelector, (IMP)dynamicMethod, "v@:");

// 注册类
objc_registerClassPair(newClass);

// 创建对象并调用动态方法
id newObject = [[newClass alloc] init];
[newObject performSelector:dynamicMethodSelector];

10.交换方法实现:

#import <objc/runtime.h>

// 获取要交换的原始方法和目标方法
Method originalMethod = class_getInstanceMethod([MyClass class], @selector(originalMethod));
Method swizzledMethod = class_getInstanceMethod([MyClass class], @selector(swizzledMethod));

// 交换方法实现
method_exchangeImplementations(originalMethod, swizzledMethod);

11.动态操作属性:

#import <objc/runtime.h>

// 添加关联对象
objc_setAssociatedObject(myObject, @"key", associatedObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

// 获取关联对象
id associatedObject = objc_getAssociatedObject(myObject, @"key");

12.发送消息:

#import <objc/message.h>

// 发送消息给对象
id result = objc_msgSend(myObject, @selector(someMethod));

相关文章

  • Runtime

    Runtime:运行时使用Runtime就是使用苹果提供的API使用Runtime可以实现OC无法实现的:1.使用...

  • runtime的用法

    1.使用runtime改变变量值 2.使用runtime交换方法 3.使用runtime添加方法 4.使用runt...

  • runTime常用方法

    使用runTime改变实例成员的值 使用runtime来交换两个方法 注意再次调用该方法不交换 使用runTime...

  • Objective-C runtime 详解

    Objective-C runtime 介绍 使用 runtime Objective c 使用系统的 runt...

  • iOS Runtime 使用

    使用runtime 首先需要导入#import runtime拷贝 objc_s...

  • Runtime全面剖析之原理篇

    如果想了解Runtime的实际应用请看Runtime全面剖析之简单使用 一:Runtime简介二: Runtime...

  • Runtime知识梳理

    补一下:runtime使用DEMO 以前对runtime的使用和了解都很模糊。这段时间,把runtime机制好好学...

  • Runtime

    Runtime的使用 .h .m #import

  • 使用Process执行外部命令

    1. Runtime 使用Runtime方法执行外部命令 2. ProcessBuilder 也是使用Proces...

  • 谈Runtime机制和使用的整体化梳理

    谈Runtime机制和使用的整体化梳理 谈Runtime机制和使用的整体化梳理

网友评论

      本文标题:runtime使用

      本文链接:https://www.haomeiwen.com/subject/iilrydtx.html