iPhone学习笔记 Runtime初探初学者必看 是本文要介绍的内容,runtime通常我们翻译成运行时,其实就是程序运行的时候才加载执行。
程序分为几个状态,编辑时-> 编译时(这时候就会到程序中检查是否有语法错误等相关的错误)-> 静态时-> 运行时
比如有些错误在编译的时候是不会出现的,就是程序在语法上没有问题。但在运行时,因为缺少资源等因素可能出现运行时错误。叫做runtime error!
比如我们之前我们了解的
C运行时::C run-time library里面含有初始化代码,还有错误处理代码(例如divide by zero处理)。你写的程序可以没有math库,程序照样运行,只是不能处理复杂的数学运算,
不过如果没有了C run-time库,main()就不会被调用,exit()也不能被响应。因为C run-time library包含了C程序运行的最基本和最常用的函数。
所以每一次在文件中你要使用runtime的方法的时候都要确认是否已经 #import <objc/runtime.h>
(存在位置 /usr/include/objc/.)
要不会提示找不到方法
这样比如你使用runtime的objc_msgsend()的方法的时候它就会编译通过
那这个runtime的具体的用处是怎样的
如下
比如你在低版本的sdk(2.x)编译的程序,然后要屏蔽掉3.x以上的复制黏贴的功能,要是你直接调用方法比如setEnableCop()
这样你在2.xSDK编译的时候就会报错,找不到所谓的方法,因为这个方法是在3.x以上的版本才会提供,在2.x根本找不到,所以方法我们不能直接的调用。
又因为iphone中的方法调用都是通过消息的形式来传递的,所以我们就可以跳过编译的步骤,在程序runtime的时候在去判断时候有存在这个方法,要是有我们就执行屏蔽
代码实例:
- -(BOOL)canPerformAction:(SEL)action withSender:(id)sender
- {
- id menu = objc_msgSend(NSClassFromString(@"UIMenuController"),NSSelectorFromString(@"sharedMenuController"));
- //或者方法调用respondsToSelector来判断是否有存在setMenuVisible的方法
- if (menu)
- {
- objc_msgSend(menu,NSSelectorFromString(@"setMenuVisible:"),NO);
- }
- return NO;
- }
小结:iPhone学习笔记 Runtime初探初学者必看的内容介绍完了,希望本文对你有所帮助。以上通过自己摸索,总结的概念,如果不对或不妥的地方请留言,共同学习!