A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我的呸 中级黑马   /  2015-8-2 21:00  /  429 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5.description方法的介绍和重写

descriptong方法默认返回对象的描述信息(默认实现是返回类名和对象的内存地址)。
description方法是基类NSObject所带的方法,因为其默认实现是返回类名和对象的内存地址,这样的话,
使用NSLog输出OC对象,意义就不是很大,因为我们并不关心对象的内存地址,比较关心的是对象内部的一些成变量的值。
因此,会经常重写description方法,覆盖description方法的默认实现。

千万不要在对象description方法中同时使用%@和self,下面的写法是错误的:
-(NSString *)description {
return [NSString stringWithFormat:@"%@", self];
}
同时使用了%@和self,代表要调用self的description方法,因此最终会导致程序陷入死循环,循环调用description方法。

6.多态的概念

多态指的是:同一种行为,对于不同的事物具有不同的表现形式。这就叫做多态。

现实生活中多态的特点:
1).在老师的眼里,他们三个我只当做人来看待。
2).三个人具有共同的行为,但是他们每1个人的这个行为的实现是不一样的。
3).给他们发送这个指令然后每1个人按照自己的实现方式去做。
程序中的多态:不同的对象以自己的方式响应相同名称方法的能力称为多态。
多态的条件:
有继承关系、有方法重写。
父类的声明变量指向子类对象。

多态的主要好处就是简化了编程接口。
它容许在类和类之间重用一些习惯性的命名,而不用为每一个新加的函数命名一个新名字。
这样,编程接口就是一些抽象的行为的集合,从而和实现接口的类的区分开来。
多态也使得代码可以分散在不同的对象中而不用试图在一个函数中考虑到所有可能的对象。
这样使得您的代码扩展性和复用性更好一些。当一个新的情景出现时,您无须对现有的代码进行改动,而只需要增加一个新的类和新的同名方法。
动态类型能使程序直到执行时才确定对象所属类型
动态类型绑定能使程序直到执行时才确定要对对象调用的实际方法
OC不同于传统程序设计语言,它可以再运行时加入新的数据类型和新的程序模块:动态类型识别,动态绑定,动态加载
注意:
1)如果存在多态,父类是可以访问子类特有的方法。
2)如果不存在多态,父类是不可以访问子类特有的方法的。

7.类的本质

类的本质其实也是一个对象(类对象)。
类对象:
类对象再程序运行时一直存在。
类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本以及消息与函数的映射表等
类对象所保存的信息在程序编译时确定,在第一次使用该类的时候被加载到内存中。
类对象代表类,class代表类对象,类方法属于类对象
如果消息的接收者是类名,则类名代表类对
运行时,所有类的实例都由类对象生成,类对象会把实例的isa的值修改成自己的地址,每个实例的isa都指向该实例的类对象,
从类对象里可以知道父类信息、可以响应的方法等
类对象只能使用类方法,不能用实例方法

8.SEL类型

SEL类型,全称为selector,是一种用来表示方法名的数据类型。
SEL类型作用:
1)可以定义变量
2)可以用来作为方法的形参
3)可以用来作为方法的实参
类中方法存储的原理:
1)类里面的方法都是被转换成SEL变量进行存储的。
2)当类声明一个对象,对象调用方法的时候,系统会把这个方法转换成SEL,然后拿这个SEL到类方法中去匹配。
Person*p=[[Personalloc]init];
[ptest];
寻找方法的过程:
(1)首先把test这个方法名包装成SEL类型的数据;
(2)根据SEL数据找到对应的方法地址;
(3)根据方法地址调用相应的方法。
(4)注意:在这个操作过程中有缓存,第一次找的时候是一个一个的找,非常耗性能,之后再用到的时候就直接使用。
SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去寻找对应的方法地址,
找到方法地址后就可以调用方法。这些都是运行时特性,发消息就是发送SEL,然后根据SEL找到地址,调用方法。



1 个回复

倒序浏览
总结的蛮好的,学习喽
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马