Runtime(四)

用C代替OC:


#import <objc/runtime.h>

#import <objc/message.h>

#import <stdio.h>


extern int UIApplicationMain (int argc,char *argv[],void *principalClassName,void *delegateClassName);



struct Rect {

  float x;

  float y;

  float width;

  float height;

};

typedef struct Rect Rect;



void *navController;

static int numberOfRows =100;




int tableView_numberOfRowsInSection(void *receiver,structobjc_selector *selector, void *tblview,int section) {

  returnnumberOfRows;

}


void *tableView_cellForRowAtIndexPath(void *receiver,structobjc_selector *selector, void *tblview,void *indexPath) {

  Class TableViewCell = (Class)objc_getClass("UITableViewCell");

  void *cell = class_createInstance(TableViewCell,0);

  objc_msgSend(cell, sel_registerName("init"));

  char buffer[7];

  int row = (intobjc_msgSend(indexPath, sel_registerName("row"));

  sprintf (buffer, "Row %d", row);

  void *label =objc_msgSend(objc_getClass("NSString"),sel_registerName("stringWithUTF8String:"),buffer);

  objc_msgSend(cell, sel_registerName("setText:"),label);

  return cell;

}


void tableView_didSelectRowAtIndexPath(void *receiver,structobjc_selector *selector, void *tblview,void *indexPath) {

  Class ViewController = (Class)objc_getClass("UIViewController");

  void * vc = class_createInstance(ViewController,0);

  objc_msgSend(vc, sel_registerName("init"));

  char buffer[8];

  int row = (intobjc_msgSend(indexPath, sel_registerName("row"));

  sprintf (buffer, "Item %d", row);

  void *label =objc_msgSend(objc_getClass("NSString"),sel_registerName("stringWithUTF8String:"),buffer);

  objc_msgSend(vc, sel_registerName("setTitle:"),label);

  objc_msgSend(navController,sel_registerName("pushViewController:animated:"),vc,1);

}


void *createDataSource() {

  Class superclass = (Class)objc_getClass("NSObject");

  Class DataSource = objc_allocateClassPair(superclass,"DataSource",0);

  class_addMethod(DataSource,sel_registerName("tableView:numberOfRowsInSection:"), (void(*))tableView_numberOfRowsInSection,nil);

  class_addMethod(DataSource,sel_registerName("tableView:cellForRowAtIndexPath:"), (void(*))tableView_cellForRowAtIndexPath,nil);

  objc_registerClassPair(DataSource);

  returnclass_createInstance(DataSource,0);

}


void * createDelegate() {

  Class superclass = (Class)objc_getClass("NSObject");

  Class DataSource = objc_allocateClassPair(superclass,"Delegate",0);

  class_addMethod(DataSource,sel_registerName("tableView:didSelectRowAtIndexPath:"), (void(*))tableView_didSelectRowAtIndexPath,nil);

  objc_registerClassPair(DataSource);

  returnclass_createInstance(DataSource,0);

}




void applicationdidFinishLaunching(void *receiver,structobjc_selector *selector, void *application) {

  Class windowClass = (Class)objc_getClass("UIWindow");

  void * windowInstance = class_createInstance(windowClass, 0);

    

  objc_msgSend(windowInstance, sel_registerName("initWithFrame:"),(Rect){0,0,320,480});

  

  //Make Key and Visiable

  objc_msgSend(windowInstance,sel_registerName("makeKeyAndVisible"));


  //Create Table View

  Class TableViewController = (Class)objc_getClass("UITableViewController");

  void *tableViewController = class_createInstance(TableViewController, 0);

  objc_msgSend(tableViewController, sel_registerName("init"));

  void *tableView = objc_msgSend(tableViewController,sel_registerName("tableView"));

  objc_msgSend(tableView, sel_registerName("setDataSource:"),createDataSource());

  objc_msgSend(tableView, sel_registerName("setDelegate:"),createDelegate());

 

  Class NavController = (Class)objc_getClass("UINavigationController");

  navController = class_createInstance(NavController,0);

  objc_msgSend(navController,sel_registerName("initWithRootViewController:"),tableViewController);

  void *view =objc_msgSend(navController,sel_registerName("view"));

  

  //Add Table View To Window

  objc_msgSend(windowInstance, sel_registerName("addSubview:"),view);

}



//Create an class named "AppDelegate", and return it's name as an instance of class NSString

void *createAppDelegate() {

  Class mySubclass = objc_allocateClassPair((Class)objc_getClass("NSObject"),"AppDelegate",0);

  structobjc_selector *selName =sel_registerName("application:didFinishLaunchingWithOptions:");

  class_addMethod(mySubclass, selName, (void(*))applicationdidFinishLaunching,nil);

  objc_registerClassPair(mySubclass);

  returnobjc_msgSend(objc_getClass("NSString"),sel_registerName("stringWithUTF8String:"),"AppDelegate");

}



int main(int argc, char *argv[]) {

  returnUIApplicationMain(argc, argv,0,createAppDelegate());

}



运行效果:

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、付费专栏及课程。

余额充值