b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

面向对象开发过程 iOS开发:Runtime解析(2)

电脑杂谈  发布时间:2018-02-20 21:52:40  来源:网络整理

我们可以看出它是个映射到方法的C字符串,你可以通过OC编译器器命令@selector() 或者Runtime系统的sel_registerName函数来获取一个SEL类型的方法选择器。

注意:不同类中相同名字的方法所对应的selector是相同的,由于变量的类型不同,所以不会导致它们调用方法实现混乱。面向对象开发过程

2.id

id是一个参数类型,它是指向某个类的实例的指针。定义如下:

typedef struct objc_object *id;

struct objc_object { Class isa; };

由上定义,看到objc_object结构体包含一个isa指针,根据isa指针就可以找到对象所属的类。

注意:isa指针在代码运行时并不总指向实例对象所属的类型,所以不能依靠它来确定类型,要想确定类型还是需要用对象的 -class 方法。KVO的实现机理就是将被观察对象的isa指针指向一个中间类而不是真实类型。

3.Class

typedef struct objc_class *Class;

Class 其实是指向 objc_class 结构体的指针。objc_class 的数据结构如下:

struct objc_class {

Class isa OBJC_ISA_AVAILABILITY;

#if !__OBJC2__

Class super_class OBJC2_UNAVAILABLE;

const char *name OBJC2_UNAVAILABLE;

long version OBJC2_UNAVAILABLE;

long info OBJC2_UNAVAILABLE;

long instance_size OBJC2_UNAVAILABLE;

struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;

struct objc_method_list **methodLists OBJC2_UNAVAILABLE;

struct objc_cache *cache OBJC2_UNAVAILABLE;

面向对象开发步骤_面向对象开发过程_面向对象方法的要点

struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;

#endif

} OBJC2_UNAVAILABLE;

从 objc_class 可以看到,一个运行时类中关联了它的父类指针、类名、成员变量、方法、缓存以及附属的协议。

其中objc_ivar_list 和objc_method_list分别是成员变量列表和方法列表:

// 成员变量列表

struct objc_ivar_list {

int ivar_count OBJC2_UNAVAILABLE;

#ifdef __LP64__

int space OBJC2_UNAVAILABLE;

#endif

/* variable length structure */

struct objc_ivar ivar_list[1] OBJC2_UNAVAILABLE;


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-86234-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 所谓“日本潜艇强于中国”的说法完全是无稽之谈

    热点图片
    拼命载入中...