前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS Runtime应用小例子 不引入类怎么创建这个类的对象和执行类的方法

iOS Runtime应用小例子 不引入类怎么创建这个类的对象和执行类的方法

作者头像
星宇大前端
发布2019-01-15 14:45:55
9950
发布2019-01-15 14:45:55
举报
文章被收录于专栏:大宇笔记大宇笔记

面试的时候面试官可能会问到这个问题:不引入类怎么创建这个类的对象和执行类的方法

想必大家都知道Runtime 。到底Runtime是怎么创建的呢,下面是一个小demo。

介绍都写在备注里了,代码也放在github。我就不赘述了。

大家可以在终端利用clang将m文件重写未cpp文件查看下。(cpp文件也在 demo里)

具体操作:http://blog.csdn.net/ZY_FlyWay/article/details/72846019

代码如下:

//

//  ViewController.m

//  RuntimeDemo

//

//  Created by apple on 2017/6/2.

//  Copyright © 2017年 ZY. All rights reserved.

//

/*

利用Runtime不引用头文件,

动态创建类对象,并调用方法

 */

#import "ViewController.h"

#import "Person.h"

#import <objc/message.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

/*

将OC翻译成Runtime动态加载语言

 */

Person  *  person  =  [[Person alloc]init];

/*

   1.objc_msgSend   给Person类发消息让他调用 alloc init

 api:

 OBJC_EXPORT id objc_msgSend(id self, SEL op, ...)

 OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0);

   2.objc_getClass  返回这个类的isa指针

 OBJC_EXPORT Class objc_getClass(const char *name)

 OBJC_AVAILABLE(10.0, 2.0, 9.0, 1.0);

   3.@selector(alloc) 方法选择器,同样可以通过sel_registerName注册方法名  @selector(alloc)==sel_registerName("alloc")

 */

//    id person   =  objc_msgSend(objc_getClass("Person"),sel_registerName("alloc"),sel_registerName("init"));

     [person logShowTest];

//    objc_msgSend(person, sel_registerName("logShowTest"));

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

demo地址:  https://github.com/RainManGO/RuntimeDemo1.git

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年06月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档