runtime的使用


#import "ViewController.h"

#import <objc/runtime.h>

//#import "Cat.h"

#import "AnimalProtocol.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    

//    [self simpleRuntime];

    [selfsetupClassByRuntime];

    [selfgetAllClass];

}



//MARK: - 3.获取内存中所有的OC

- (void)getAllClass{

    //类的数量

    int numOfClasses;

    // 存放指向第一个类的指针

    Class *classes = NULL;

    // 获取多少类

    numOfClasses = objc_getClassList(NULL,0);

    

    // 如果获取的类大于0

    if (numOfClasses >0) {

        

        //为获取所有的类开辟内存空间

        classes = (Class *)malloc(sizeof(Class) *numOfClasses);

        // 把所有类拷贝到我开的内存中

        numOfClasses = objc_getClassList(classes, numOfClasses);

        

        // 遍历所有的类

        for (NSInteger i =0 ; i < numOfClasses; i++) {

            Class cls = classes[i];

            //打印所有的类

//            NSLog(@"className : %@", NSStringFromClass(cls));

            //方法一:通过类名检索需要找的类

//            if ([NSStringFromClass(cls) isEqualToString:@"Dog"]) {

//                NSLog(@"找到了Dog:%@",cls);

//            }

            

           //方法二:通过协议来检索我们需要的类(面向协议编程,不再依赖.h.m文件,即使删除了文件,程序依然能够正常运行)

            if (class_conformsToProtocol(cls,@protocol(AnimalProtocol))) {

                NSLog(@"找到了遵守AnimalProtocol的类:%@",cls);

                

                //创建一个遵守AnimalProtocol的对象

                id <AnimalProtocol> instance = [[clsalloc]init];

                //让对象实现这个协议的方法

                [instance test];

                

            }

        }

        

        //释放内存

        free(classes);

        

    }

}



//MARK: - 2. 运行如何添加一个类

- (void)setupClassByRuntime{

    //设置类名

    constchar * className = "Dog";

    //通过类名获取类

    Class dogClass = objc_getClass(className);

    //如果类不能存在,就创建基类

    if (!dogClass) {

        Class superClass = [NSObjectclass];

        

        dogClass = objc_allocateClassPair(superClass, className,0);

    }

    

    //注册这个类

    objc_registerClassPair(dogClass);

    

    //对类添加方法

    IMP dogImp =imp_implementationWithBlock(^ (id _self,NSString *string){

        NSLog(@"Hello:%@",string);

    });

    

    // @encode(float) 用这个关键字可以获取参数类型:这个block有无返回值及参数类型 (v:代表这个block没有返回值,@:代表self这个对象,@代表string这个oc对象(如果是float类型,就是f))

    class_addMethod(dogClass,@selector(sayHello:), dogImp,"v@:@");

    

}



- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

{

    //创建类

    Class dogClass = NSClassFromString(@"Dog");

    //创建类对象

    id dog = [[dogClassalloc]init];

    //执行添加的方法

    [dog performSelector:@selector(sayHello:)withObject:@"My name is heheda"];

}




//MARK: - 1. 最简单的运行时

- (void)simpleRuntime {

    //1)导入头文件 #import <objc/runtime.h>

    //2)创建类(.m.h文件),并设置属性

    //3)运行的时候会创建这个类的对象并设置其属性

    Class catClass = NSClassFromString(@"Cat");

    id cat = [[catClassalloc]init];

    [cat performSelector:@selector(setName:)withObject:@"coffee"];

    NSLog(@"%@",[catvalueForKey:@"name"]);

}


@end



//源码链接:https://github.com/KimmyKing/simpleUsing-runtime.git



基于STM32F407,使用DFS算法实现最短迷宫路径检索,分为三种模式:1.DEBUG模式,2. 训练模式,3. 主程序模式 ,DEBUG模式主要分析bug,测量必要数据,训练模式用于DFS算法训练最短路径,并将最短路径以链表形式存储Flash, 主程序模式从Flash中….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
ONNX Runtime 是一种高性能、可移植的机器学习推理框架,旨在提供统一的API来支持多种模型格式,并在各种硬件平台上高效运行。它特别适合于在CPU、GPU甚至其他加速器上进行模型部署。 ### ONNX Runtime 支持 GPU 推理 ONNX Runtime 提供了对GPU的支持,通过充分利用CUDA技术,可以显著提升模型推理速度,特别是在处理大量数据或对性能有高要求的应用场景下。以下是ONNX Runtime如何利用GPU进行推理的一些关键点: 1. **模型加载**:首先需要将模型加载到ONNX Runtime中。对于GPU模型,这通常意味着模型本身已经被优化以便在GPU上运行。 2. **设备配置**:在创建ONNX Runtime会话时,你可以指定使用GPU作为计算资源。例如,在Python环境中,你可以通过设置`execution_providers=['CUDAExecutionProvider']`来指示ONNX Runtime优先使用GPU执行推理任务。 3. **内存管理**:ONNX Runtime会在GPU上分配必要的内存空间用于存储输入数据、中间结果以及最终输出。这包括预处理输入数据以适应模型的要求,以及处理从GPU返回的结果。 4. **并行化和优化**:通过使用GPU,ONNX Runtime能够并行处理大量的矩阵运算和其他数学操作,这对于深度学习模型中的卷积层、全连接层等具有很高的计算密集型特性来说尤为重要。 5. **性能监控**:为了提高效率,ONNX Runtime会自动调整和优化GPU的使用情况,比如动态调整线程数以匹配当前的任务负载,以及使用高级的并行算法来减少延迟时间和提高吞吐量。 6. **兼容性和灵活性**:ONNX Runtime设计的目的是跨平台,这意味着它可以很好地支持不同的GPU架构,如NVIDIA、AMD和Intel的最新GPU系列,并且随着新硬件的发展而持续更新优化策略。 ### 应用实例 假设你需要在基于ONNX的机器学习项目中使用GPU推理,步骤大致如下: ```python import onnxruntime as ort # 加载ONNX模型文件 model_path = 'path_to_your_model.onnx' session = ort.InferenceSession(model_path) # 获取可用的执行提供者,优先选择GPU providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] ort_session = ort.InferenceSession(model_path, providers=providers) ``` 在上述示例中,`CUDAExecutionProvider`表示我们希望ONNX Runtime尝试使用GPU来进行推理。如果GPU不可用,则会回退到CPU执行。 ### 相关问题: 1. 如何检查我的系统是否支持ONNX Runtime的GPU推理功能? 2. 在ONNX Runtime中调整GPU使用率的最佳实践是什么? 3. 如果遇到GPU性能瓶颈,应如何排查和优化ONNX Runtime的GPU使用效率?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值