Runtime学习1

最近在研究Runtime,感觉都是一知半解。

所以接敲了一个demo。

自己再学习下。

很多东西都是不知道。

以下是掌握这几个方法。

#warning 对象拷贝 \

id object_copy(id obj, size_t size)


#warning 对象释放 \

id object_dispose(id obj)


#warning 更改对象的类 \

Class object_setClass(id obj, Class cls) 


#warning 获取对象的类 \

Class object_getClass(id obj)


#warning 获取对象的类名 \

constchar *object_getClassName(id obj)


#warning 给类添加一个方法\

BOOL class_addMethod(Class cls,SEL name,IMP imp,const char *types)

/*

    BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)

    参数说明:

    cls:被添加方法的类

    name:可以理解为方法名

    imp:实现这个方法的函数

    types:一个定义该函数返回值类型和参数类型的字符串

 

 */


CustomClass

//
//  CustomClass.m
//  Runtime学习1
//
//  Created by 陆巧怡 on 15/7/31.
//  Copyright (c) 2015年 Simon. All rights reserved.
//

#import "CustomClass.h"

@implementation CustomClass
-(void)func1{
    
    NSLog(@"func1");
}
@end

CustomClassOther

//
//  CustomClassOther.m
//  Runtime学习1
//
//  Created by 陆巧怡 on 15/7/31.
//  Copyright (c) 2015年 Simon. All rights reserved.
//

#import "CustomClassOther.h"

@implementation CustomClassOther
-(void)func2{
    
    NSLog(@"func2");
}
@end

实现代码 demo

//
//  ViewController.m
//  Runtime学习1
//
//  Created by 陆巧怡 on 15/7/31.
//  Copyright (c) 2015年 Simon. All rights reserved.
//

#import "ViewController.h"
//#import <objc/runtime.h>
#include<objc/runtime.h>
#import "CustomClass.h"
#import "CustomClassOther.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self twoParam];
    
    
}

#warning 对象拷贝 \
id object_copy(id obj, size_t size)
-(void)object_Copy_Func{
    
    CustomClass *obj = [[CustomClass alloc]init];
    NSLog(@"地址:%p", &obj);
    id objectTest = object_copy(obj,sizeof(obj));
    NSLog(@"地址:%p", &objectTest);
    // 拷贝的对象后 调用原有对象的方法
    [objectTest func1];
}

#warning 对象释放 \
id object_dispose(id obj)
-(void)object_dispose_Func{
    
    CustomClass *obj = [[CustomClass alloc]init];
    NSLog(@"地址:%p", &obj);
    
    object_dispose(obj);
    //释放对象
    [obj release];
    //调用方法崩溃
    [obj func1];
    
}

#warning 更改对象的类 \
Class object_setClass(id obj, Class cls) 
-(void)setClassText{
    
    CustomClass *obj = [[CustomClass alloc]init];
    //获取对象的类
    NSLog(@"obj原来的类%@",NSStringFromClass([obj class]));

    //更改对象的类
    Class change = object_setClass(obj, [CustomClassOther class]);
    NSLog(@"change 的类%@",NSStringFromClass(change));
    NSLog(@"obj更改后的类%@",NSStringFromClass([obj class]));
    //更改类之后调用新类的方法
    [obj func2];
}

#warning 获取对象的类 \
Class object_getClass(id obj)
-(void)getClassText{
    
    CustomClass *obj = [[CustomClass alloc]init];
    //获取对象的类
    Class objectClass = object_getClass(obj);
    NSLog(@"%@",NSStringFromClass(objectClass));
}

#warning 获取对象的类名 \
constchar *object_getClassName(id obj)
-(void)getClassName{
    
    CustomClass *obj = [[CustomClass alloc]init];
    NSString *className = [NSString stringWithCString:object_getClassName(obj) encoding:NSUTF8StringEncoding];
    NSLog(@"%@",className);
}

#warning 给类添加一个方法\
BOOL class_addMethod(Class cls,SEL name,IMP imp,const char *types)
/*
    BOOL class_addMethod(Class cls, SEL name, IMP imp, const char *types)
    参数说明:
    cls:被添加方法的类
    name:可以理解为方法名
    imp:实现这个方法的函数
    types:一个定义该函数返回值类型和参数类型的字符串
 
 */
-(void)oneParam{
    
    CustomClass *objectText = [[CustomClass alloc]init];
    
    //方法添加
    class_addMethod([CustomClass class],@selector(ocMethod:), (IMP)cfunction,"i@:@");

    if ([objectText respondsToSelector:@selector(ocMethod:)]) {
        
        NSLog(@"Yes, objectText respondsToSelector:@selector(ocMethod:)");

    }else{
        NSLog(@"sorry");
    }
    int a = (int)[objectText ocMethod:@"我是一个OC的method,C函数实现"];
    NSLog(@"a:%d", a);
    
}
#warning c方法
int cfunction(id self, SEL _cmd, NSString *str) {
    NSLog(@"---%@", str);
    return 10;//随便返回个值
}


-(void)twoParam{
    
    CustomClass *objectText = [[CustomClass alloc]init];
    class_addMethod([CustomClass class], @selector(ocMethodA::), (IMP)cfunction2, "i@:@@");
    if ([objectText respondsToSelector:@selector(ocMethodA::)]) {
        NSLog(@"yes");
    }else{
        
        NSLog(@"no");
    }

    int num = (int) [objectText ocMethodA:@"第一参数":@"第二个参数"];
    NSLog(@"a:%d", num);

}

int cfunction2(id self, SEL _cmd ,NSString *str,NSString *str1){
    
    NSLog(@"%@ %@",str,str1);
    
    return 20;
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}



@end


ONNX Runtime是一个开源框架,旨在提供高性能、跨平台的推理能力。它支持多种硬件设备,包括CPU、GPU、TensorRT等,并且可以用于各种深度学习框架产生的模型。 ### 学习 ONNX Runtime 的步骤 #### 步骤一:了解基础知识 - **ONNX**:首先了解ONNX是什么以及其背景,它是如何帮助解决模型部署的问题的。 - **ONNX Runtime**:研究它的目标、优势以及如何促进模型的灵活性和性能。 #### 步骤二:安装环境 - 确保您的计算机上已经安装了Python和必要的依赖库(如numpy)。 - 安装ONNX Runtime包,可以通过pip命令轻松完成: ```bash pip install onnxruntime ``` #### 步骤三:入门示例 - **加载模型**:学会如何加载从ONNX格式导出的模型文件。 - **执行推理**:编写代码以对输入数据进行前向预测。 - **优化性能**:理解如何调整配置以提高推理速度和效率。 #### 步骤四:深入实践 - **探索文档**:查阅官方文档,获取关于特定功能和最佳实践的信息。 - **实践案例**:尝试使用ONNX Runtime处理实际场景中的任务,比如图像分类、文本分析等。 - **社区资源**:利用GitHub、论坛和博客查找教程、案例研究和问题解答。 #### 步骤五:进阶技能 - **调试与故障排除**:掌握如何定位和解决在模型推理过程中遇到的问题。 - **高级优化**:学习如何针对特定硬件进行模型优化,例如利用GPU加速。 - **集成与组合**:研究如何将ONNX Runtime与其他工具和服务集成,如TensorFlow Serving、Kubernetes等。 ### 相关问题: 1. **ONNX Runtime 是否支持所有深度学习框架?** - ONNX Runtime 支持导入来自多种框架的模型,如 TensorFlow、PyTorch、MXNet 等,只要模型已被转换为 ONNX 格式。 2. **如何评估 ONNX Runtime 对于我的项目来说是否合适?** - 考虑您的项目需求,包括性能需求、兼容性、易用性和社区支持等因素。测试ONNX Runtime在您特定应用上的表现。 3. **ONNX Runtime 是否支持实时推理?** - 是的,ONNX Runtime 设计用于快速响应和低延迟的推理,非常适合需要实时处理的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值