Object—C的Runtime机制的研究分析与应用

来源 :经营管理者·中旬刊 | 被引量 : 0次 | 上传用户:wecofe
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:RunTime是系统运行时的机制,其中最主要的是消息机制。本文主要对Runtime的消息机制进行研究并分析了其运行过程,最后结合实例阐述了该机制的使用方法。
  关键词:Runtime 运行时 动态调用 消息机制
  一、引言
  目前,Obj-C被广泛应用于苹果的设备中,包括IOS系统,Mac OS系统等。虽然目前已有Swift出现,但是由于Obj-C有更好的底层属性值得研究,对于熟悉和深入研究苹果系统有非常高的研究价值。其中Runtime机制就是Obj-C的一大特色,能在运行期处理的机制。本文对消息机制进行了研究分析,并阐述了其实际运用。
  二、Runtime中消息机制的研究
  #include
  void printHi(){printf(“Say Hi!\n”);}
  void printBye(){printf(“Say Bye!\n”);}
  void doTheTing(int type){
  void (*func)();
  if(type==0){
  func = printHi;
  }else{func = printBye;}
  func();
  return 0;}
  在上述例子中,只有一个函数调用指令,待调用的的函数地址无法硬编码在指令中,而是要在运行期才能知道,这是一个动态绑定。在Obj-C中,如果要向一个对象传递一个消息,那么就会使用这种“动态绑定”机制来决定所需要调用的方法。
  在Obj-C中,给对象发送消息可以这样写:
  id value = [Object messageName:parameter];
  这个实例中,Object是“接受者”(receiver),messageName叫做“选择子”(selector)。两者结合起来就是“消息”。编译器在读取这条消息后,会将其转变为一条普通的C语言函数调用。这个函数叫做objc_msgSend,其中“原型”如下:
  id value = obj_msgSend(Object ,@selector(messageName:),parameter);
  这就是运行期中Obj-C的消息机制,Obj-C中的类都继承自NSObject。
  @interface NSObject {
  Class isa OBJC_ISA_AVAILABILITY;
  }

  其中存在一个指向Class的isa指针,那么再来看下Class这个类。
  typedef struct objc_class *Class;
  struct objc_class {
  Class isa;
  Class super_class ;
  const char *name ;
  long version ;
  long info;
  long instance_size ;
  struct objc_ivar_list *ivars;
  struct objc_method_list **methodLists ;
  struct objc_cache *cache;
  struct objc_protocol_list *protocols; }
  在这个类中存在很多属性,一般一个Obj对象中的isa会指向普通的Class,这个Class中存储普通成员变量和对 象方法(“-”开头的方法),普通Class中的isa指针指向静态Class,静态Class中存储static类型成员变量和类方法(“+”开头的方法)。Class super_class:指向父类,如果这个类是根类,则为NULL。
  三、Runtime机制的实际运用
  在IOS或者Mac OS的编程中,经常会遇到归档与解档,常规的归档与解档要对数据进行序列化和反序列化,并且代码重用率很高。现在,通过Runtime的机制来对其进行操作。
  首先是构建Cat的类文件,如下所示。
  @protocol CatDelegate
  - (void)catEat;
  @end
  @interface Cat : NSObject
  #pragma mark - 属性
  @property (nonatomic , assign) id delegate;
  @property (nonatomic , copy) NSString *name;
  @property (nonatomic , copy) NSString *sex;
  @property (nonatomic , assign) int age;
  #pragma mark - 方法
  - (void)eat;
  - (void)sleep;
  @end
  在此方法類中定义了name,sex,age等属性,通过之前的叙述,可以明白这些属性已经在Class中访问到,那么,我们通过改写.m文件来实现该类的归档与解档。如下所示
  @interface Cat()   @end
  @implementation Cat
  -(void)encodeWithCoder:(NSCoder *)aCoder{
  unsigned int count;
  objc_property_t *properties = class_copyPropertyList([self class], &count);
  for (int i =0; i  objc_property_t property = properties[i];
  const char *name = property_getName(property);
  NSString *propertyName = [NSString stringWithUTF8String:name];
  NSString *propertyValue = [self valueForKey:propertyName];
  [aCoder encodeObject:propertyValue forKey:propertyName];
  }free(properties);}
  接下來,通过实现方法来看下具体的结果。如下代码和图1所示。
  -(void)test{
  Cat *cat = [[Cat alloc] init];
  cat.name = @”猫1";
  cat.age = 3;
  cat.sex = @"公";
  NSString *path = [NSString stringWithFormat:@"%@/archive",NSHomeDirectory()];
  [NSKeyedArchiver archiveRootObject:cat toFile:path];
  Cat *unarchiverCat = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
  NSLog(@"unarchiverCat== %@ %@",path , unarchiverCat);}
  通过这种方法,归档和解档的步骤变得非常简单,也使程序的调度变得非常实用,高效。
  四、结语
  通过介绍Runtime的机制的使用方法,使得开发者可以懂得Obj-C真正的运行过程,灵活运用Runtime机制可以更好的操控程序,懂得如何在运行中控制程序,以深入理解Objective-C的Runtime数据结构、消息转发机制有助于更容易地阅读和学习开源项目。
  参考文献:
  [1] Matt Galloway. Effective Object-C 2.0:编写高质量ios与OS X代码的52个有效方法;机械工业出版社,2015,08.
  [2] 刘乐,李敬兆. IOS内存开发管理机制的研究[J]; 安徽理工大学计算机科学与工程学院,2013,03.
  [3] 王文东,竹林,建人. 汇编语言与C语言的混合程序设计技术[D]. 延安大学,2006,08.
  [4] 钟冠贤. Object-C编程之道:IOS设计模式;北京:人民邮电出版社,2011,01.
  [5] 唐巧,Blogger. IOS开发进阶[M].北京:电子工业出版社,2015,01.
其他文献
摘 要:《网页设计》是高职电子商务专业的核心课程之一,对培养学生的网页设计、管理网站的实际操作能力有着重要的意义。当前我国部分高职院校对电子商务專业《网页设计》的教学不尽人意,不利于学生的长远发展。本文首先阐述了高职电子商务专业《网页设计》课程的教学现状,并就如何提高《网页设计》这门课程的教学效果提出教学建议与策略。  关键词:高职 电子商务专业 网页设计 教学  一、引言  随着网络经济的兴起与
期刊
摘 要:在移动互联网高速发展的大背景下,国内企业纷纷发挥自身优势以更好地融入互联网经济中。而在互联网经济中,年轻的消费群体无疑是主导力量。如今,学生这一消费群体被许多互联网创业者看中,竞争平台纷纷介入校园市场。本文通过已有的理论和文献分析,阐述了在互联网经济下中国目前校园O2O经济的市场现状和发展前景,提出了校园O2O 经济发展过程中可能会出现的问题并联系实际情况提出了对应的方法和措施,使线上与线
期刊
摘 要:在经济社会快速发展形势下,档案工作涉及在各行各业。档案管理在随着社会发展的同时,出现新的进步与优化,尤其是在在快速发达的计算机信息社会,电子计算机发挥着巨大的信息承载作用。但是,档案管理工作仍然存在着一定的问题需要业内人员加以研究和总结,以致可以进一步优化档案管理工作,高效率的满足档案需求。  关键词:档案 档案管理 问题 对策  档案工作涉及到经济社会发展的各个行业,档案是对工作历史和重
期刊
摘 要:在时代与科技快速发展的背景下,项目工程取得了长足进步,而项目的信息量也随之增加,为此,需要项目信息管理工作更准确与详细。传统的依靠介质流实现内外部信息传递的方式,已经无法适应项目工程及社会发展的需要,所以,一定要改革并创新管理技术。文章针对项目信息管理中的计算机网络技术应用问题展开了讨论,以供参考。  关键词:计算机 网络技术 项目信息管理 应用 分析  现阶段,计算机技术发展前景十分理想
期刊
摘 要:阐述了高职院校科研管理信息系统的设计方法及期实现的关键技术,系统能够适应科研成果统计、课题在线申报等管理的要求,满足当前科研管理工作的需要。  关键词:科研信息 管理人员 审核  一、系统需求描述  当前高校教师的科研信息越来越多,如果继续采用传统的人工方式管理,会给学校的科研管理人员和教师带来工作效率低下、信息丢失等一系列问题。随着校园网络信息化的建设,我们可以通过计算机网络和数据库技术
期刊
摘 要:互联网+时代的到来,给企业培训带来了诸多挑战,传统的培训方式很难再适应互联网+时代培训时间分散、形式灵活、内容要高度个性化的需求。样使传统的E-Learning培训焕发出新的生机,利用互联网技术的便捷性,整合出E-Learning培训在互联网+时代新的应用模式,以便企业培训更好地适应时代发展的需求是本文探讨的重点。  关键词:E-Learning 培训 互联网+ 创新  一、E-Learn
期刊
摘 要:伴随着经济水平提高一同产生变化的,是人们对于健康生活的重视程度。人们对于健康的追求,着重体现在健康饮食方面。我国是一个农业大国,一直以来农产品的运输和流通就一直是对其造成影响最大的一方面,很多时候都是这方面的问题造成了农民农户的亏损。而现在面临所谓“饮食健康”的挑战,就给农产品的配送提出了很高的要求。因为鲜活农产品本身的特性以及消费者的要求,所以农产品的冷链物流对于其销售有着非常直接的影响
期刊
摘 要:企业形式上并购之后的文化整合情形,与并购的最终效果甚至是成败有着极大的直接影响,研究企业并购中的文化影响因素,把握企业文化整合的根本原则,对于成功实现企业并购是非常有帮助的。笔者主要基于伊斯兰文化对企业并购的影响进行阐述,同时选取宁夏回族自治区内的企业并购例子进行论述。  关键词:伊斯兰文化 企业并购 回族  一、引言  自上世纪末叶至今,全球的生产力有了快速的提高,市场竞争极为激烈,资本
期刊
摘 要:随着信息技术和科技水平的不断发展与进步,依托于计算机技术而是实现的自动化管理办公模式逐渐被各类企业所引进,并且日趋完善,而文书档案管理的办公自动化也开始进入了实践和普及阶段。本文就文书档案管理的办公室自动化实践过程中出现的问题进行简单的分析,并提出对应的解决办法,以供参考。  关键词:文书档案管理 办公自动化 优化  文书档案管理模式能够极大的提高工作效率,并同时保证文书档案的传输安全性和
期刊
摘 要:“网络“的概念是网络经济学的核心基础概念,对网络经济中“网络”的界定及特征的研究是网络经济学的基本问题之一。网络经济学所指的“网络”更多时候是虚拟的网络,即各个组成网络的各个节点之间并不存在有物理介质的连接,节点之间的连接体现为节点间的信息交换,或者节点之间相互依赖的特征。虚拟网络能够以物理网络为基础,也能够完全脱离物理网络而独立存在,基于互联网的产品和服务的兴起,催生了大量的基于互联网的
期刊