day05 多继承
1.知识点回顾
1.分类
1.匿名分类
没有名的分类,又叫匿名类别、也叫类扩展。
作用:
就是你的类扩展写在类实现中.m文件中
1.成员变量(私有)
2.属性(私有)
3.方法(私有)
也有的人通过类扩展的方式 写在*.h文件中(具体问题具体分析)
2.有名分类
有名称的分类,用于对不知道源代码的类进行扩展的一种机制。
1.只能扩展方法(不能扩展成员 以及属性)
2.单例类
单例是一种设计模式
单例的作用:只能实例化一次分类,创建的对象是唯一的。
static 单例类 *对象指针 = nil;//nil表示对象空
+(类名 *)shareInstance
{
if(!对象指针)
{
对象指针 = [self new];
}
return 对象指针;
}
3.协议
是OC中的一个特有的语法。
@protocol 关键字来声明协议<NSObject>
//协议是一个共有的方法列表
@end
1.第一种用法 xxx.h
2.第二种用法 直接写在.h文件中(企业中常见)
作用:
1.分散接口
1.1协议委托中 ——>被委托类中去了
1.2使用协议可以实现 ——>接口(方法)的多继承
语法上只支持单继承 ——>类和类的关系
通过协议语法实现的方法(接口)的多继承
2.实现协议委托
3.实现协议委托并传值(反向传值)
4.往往和 id<协议> 让类更加具有通用性
4.协议委托
委托又是一种设计模式(委托 代理)是对象 和 对象之间一种通讯机制,是一对一的一种通讯方式。
当一个对象想做一件事却没有能力去做,另外一个对象有能力去做当前对象想做的事情,我们就可以委托这个有能力
去做这件事的对象做我们想做的事情。
委托
1.隐式委托
2.非正式协议委托
3.正式协议委托
委托类
委托人的属性@property(weak)id<协议>delegate
————>制定协议
1.方法(委托事件)
被委托类<遵守协议>
|
——————>实现协议中的方法
1.协议中的必选方法和可选方法
使用的时候:
1.创建委托类的对象
2.创建被委托类的对象
3.设置委托类的 委托人 属性
委托对象.delegate = 被委托人;
4.通过被委托人调用方法
[委托对象.delegate 方法1];
[委托对象.delegate 方法2];
二.多继承在OC中的实现
2.1通过协议来实现方法(接口的)多继承
【类A】 【类B】
-(void)A; -(void)B;
【类C】
-(void)A;-(void)B;//想用AB方法
-(void)C;//自己还有C方法
三、OC中结构体
3.1OC常见的结构体
1.C风格的结构体
struct Student
{
//成员变量;
int age;
int no;
}
2.CGRect 由两个结构体组成,作用 就是可以保存一个对象在UI视图中得位置和大小。
其中 位置是由 CGPoint来保存的。
大小是由 CGSize来保存的。
struct CGPoint
{
CGFloat x;//x轴坐标
CGFloat y;//y轴坐标
}
struct CGSize
{
CGSi
}
struct CGRect
{
CGPoint point;
CGSize size;
}
都是创建了结构体这个类型的一个变量,是变量不是对象。
对象创建在堆中,变量创建在栈中。
3.2 NSValue 类型
NSValue 数据类型 就是能够把C语言中的数据类型转换成OC中使用的对象类型。
一般用于存储C语言中比较常见的结构体类型。