• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Objective-C Runtime I

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

核心理念

Objective-C语言将决定尽可能的从编译和链接时推迟到运行时。

早期版本和现行版本

Objective-C运行时系统有两个已知版本:早期版本和现行版本。现行版本主要是Objective-C 2.0及与其相关的新特性。

在现行版本中,最显著的新特性就是实例变量是"健壮“(non-fragile)的:

  • 在早期版本中,如果您改变类中实例变量的布局,您必须重新编译该类的所有子类。

  • 在现行版本中,如果您改变类中实例变量的布局,您无需重新编译该类的任何子类。

此外,现行版本支持声明property的变量的统一声明。

平台

iPhone程序和Mac OS X v10.5及以后的系统中的64位程序使用的都是Objective-C运行时系统的现行版本。

其它情况(Mac OS X系统中的32位程序)使用的是早期版本。

Objective-C程序有三种途径和运行时系统交互:通过Objective-C源代码;通过Foundation框架中类NSObject的方法;通过直接调用运行时系统的函数。

通过类NSObject的方法

Cocoa程序中绝大部分类都是NSObject类的子类,所以大部分都继承了NSObject类的方法,因而继承了NSObject的行为。然而,某些情况下,NSObject类仅仅定义了完成某件事情的模板,而没有提供所有需要的代码。

例如,NSObject类定义了description方法,返回该类内容的字符串表示。这主要是用来调试程序——GDB中的print-object方法就是直接打印出该方法返回的字符串。NSObject类中该方法的实现并不知道子类中的内容,所以它只是返回类的名字和对象的地址。NSObject的子类可以重新实现该方法以提供更多的信息。例如,NSArray类改写了该方法来返回NSArray类包含的每个对象的内容。

某些NSObject的方法只是简单地从运行时系统中获得信息,从而允许对象进行一定程度的自我检查。例如,class返回对象的类;isKindOfClass:isMemberOfClass:则检查对象是否在指定的类继承体系中;respondsToSelector:检查对象能否响应指定的消息;conformsToProtocol:检查对象是否实现了指定协议类的方法;methodForSelector:则返回指定方法实现的地址。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Objective-cruntime方法替换引发的死循环发布时间:2022-07-12
下一篇:
GCC下基本类型编码(基于Objective-C)发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap