iPhone学习笔记 Runtime初探初学者必看

移动开发 iOS
本文介绍的iPhone学习笔记 Runtime初探初学者必看,详细的介绍了Runtime的状态,我们来看详细内容。

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的时候在去判断时候有存在这个方法,要是有我们就执行屏蔽

代码实例:

  1. -(BOOL)canPerformAction:(SEL)action withSender:(id)sender  
  2. {  
  3.     id menu = objc_msgSend(NSClassFromString(@"UIMenuController"),NSSelectorFromString(@"sharedMenuController"));
  4. //或者方法调用respondsToSelector来判断是否有存在setMenuVisible的方法  
  5.     if (menu)  
  6.     {  
  7.         objc_msgSend(menu,NSSelectorFromString(@"setMenuVisible:"),NO);  
  8.     }  
  9.     return NO;  

小结:iPhone学习笔记 Runtime初探初学者必看的内容介绍完了,希望本文对你有所帮助。以上通过自己摸索,总结的概念,如果不对或不妥的地方请留言,共同学习!

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-08-10 16:44:56

iPhone代理设计模式

2011-09-16 09:38:19

Emacs

2011-08-24 17:05:01

Lua

2011-07-26 10:42:00

Cocoa Cocoa2d 游戏

2011-09-08 10:38:37

Widget

2011-07-27 10:02:12

iPhone Framework

2011-06-17 14:54:31

Qt

2011-06-17 15:19:28

Qt

2011-06-17 15:44:25

Qt

2011-06-17 14:41:56

Qt

2011-06-17 15:25:18

Qt

2013-04-23 10:51:15

Linux压缩

2011-06-17 15:37:42

Qt

2011-06-17 14:29:55

Qt

2011-06-17 15:06:14

Qt

2011-06-17 15:32:28

Qt

2011-06-17 14:12:32

Qt

2009-11-17 15:33:26

PHP数组元素

2009-10-22 16:46:03

VB.NET初步知识

2011-06-27 14:56:46

Qt Designer
点赞
收藏

51CTO技术栈公众号