黑马程序员----Objective-C学习笔记之类的本质与SEL类型

来源:互联网 发布:广告公司设计软件 编辑:程序博客网 时间:2024/06/06 04:10
------Java培训、Android培训、iOS培训、.Net培训--------

一、类的本质

1、类的本质

类的本质其实也是一个对象(类对象),是Class类型

 

【类对象】

1)类对象在程序运行时一直存在

2)类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本信息,以及消息和函数的映射表等

 

2、类对象如何获取

 

1)通过实例对象获取

 

例如:

        Animal *ani = [Dog new];        Animal *ani2 = [Dog new];        Class ac = [ani class];        Class ac2 = [ani2 class];                NSLog(@"ac = %p", ac);        NSLog(@"ac2 = %p", ac2);        NSLog(@"Dog = %p", [Dog class]);

打印结果:

2015-10-04 22:38:57.712VariableClass[2302:303] ac = 0x100001330

2015-10-04 22:38:57.714VariableClass[2302:303] ac2 = 0x100001330

2015-10-04 22:38:57.716VariableClass[2302:303] ac2 = 0x100001330

 

2)通过类名获取

1)中NSLog(@"Dog = %p", [Dogclass]);

 

 

3、类对象的使用

例如:

      

  Animal *ani = [Dog new];        Class ac = [ani class];               Dog *dog = [ac new];        [dog bark];

打印结果:

2015-10-04 22:43:38.948 VariableClass[2355:303] Wangwang...

分析结果:

可知类对象ac可以当Dog类用,可以创建Dog实例对象


二、SEL类型

SEL:全程selector表示方法的存储位置

 

寻找方法的过程:

1)先把方法封装成一个SEL类型的数据

2)根据SEL数据找到对应的方法地址

3)根据方法地址调用相应的方法

4)【注意】在这个操作过程中有缓存,第一次找得时候是一个一个的找,非常消耗性能,之后再用到的时候就直接使用。

 

【注意】SEL其实是对方法的一种包装,将方法包装秤一个SEL类型的数据,去寻找对应的方法地址,找到方法地址就可以调用方法,这些都是运行时的特性,发消息就是发送SEL,然后根据SEL找到地址,调用方法。

例如:

        Dog *dog = [Dog new];        [dog bark];        SEL sel = @selector(bark);        [dog performSelector:sel];


 

打印结果:

2015-10-04 23:02:58.856 VariableClass[2437:303] Wangwang...

2015-10-04 23:02:58.859 VariableClass[2437:303] Wangwang...


0 0
原创粉丝点击