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;

}

 

//注:

以上通过自己摸索,总结的概念,如果不对或不妥的地方请留言,共同学习。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值