OCday04

来源:互联网 发布:奚梦瑶失误 知乎 编辑:程序博客网 时间:2024/05/29 15:04

day04 分类、扩展、协议、单例、代理

 

一、知识点回顾

1.继承

1.OC中继承指的类和类之间的关系。

2.OC中继承指的单继承。语法上不支持多继承。

3.OC中继承都是公有继承(有且仅有公有继承)。

4.OC中得继承为什么都是单继承?

1.借鉴了 高级语言 java和 smalltalk都是单继承

2.为了避免多继承中出现的菱形继承(钻石继承)出现二义性。

        *3.遵守了开放和封闭原则(类的设计)

5.为什么要使用继承?

1.继承可以实现复用。(98%复用)

2.继承是类的一种扩展机制。(子类必须高度相似父类)

6.单继承由那些缺点?

1.语法上只支持单继承,没有多继承。

2.使用单继承 要求父类的设计要非常了解。且子类的内容高度依靠父类。(子类必须和父类高度相似)

3.使用单继承时可以增大子类的空间。

FFFFFFFFFF

FFFFFFFFFF ------------>增大了子类的空间

SSSSSSSSSS

SSSSSSSSSS

7.初始化方法

-(id)init

{

self=[super init];

if(self)

{

//初始化子类部分

}

return self;

}

8.id类型  self类型  super类型

id类型   是一个泛型   表示OC中所有类型的对象。

是一个弱类型,还是一个隐式的指针类型。(不带*)

id类型  返回值  做参数  id类型的数组  id类型的变量

 

self类型   也是一个指针  表示的是指向当前对象的指针。

- 方法中 self表示的就是一个当前的对象。

用法:

1.初始化方法中 self=[super init];

2.self.属性  (set  get)

3.self方法   [self setNo:200];

4.self调用类内的对象方法

-(void)f1

{

[self f2];

}

*5.self在+类 方法中的作用

表示的是当前类的类名  [self  new];

super  表示的是超类、也叫父类、也叫基类

作用:出现在函数中,用来调用父类中的初始化方法

1.初始化方法中常见

*2.试图控制的生命周期

 

多态

1.什么是多态?

相同的函数名在不同的子类中表现出来的功能各不相同。

2.实现多态需要哪些条件?

1.有多态必有继承  多态是建立在继承的基础上。

2.才能拿一个父类的指针指向子类的对象。

3.OC中所有的方法(函数)都是虚函数,虚函数的特点

不看指针  看对象。

3.什么时候用多态?

1.就是一个类有多个子类的时候用多态。

2.使用多态可以少写很多的子类对象的指针。

男人类

女人类

 

动物

狗  Dog *dog

猫  Cat  *cat

老虎

……

4.知道方法的重写(初始化方法)、重载(少)

5.知道runtime(运行时)  多态

id  实现的多态  是指编译器编译阶段不检查类型,在运行时,才需要匹配对象的数据类型。

 

二、单例

demo-4有具体例子  价值好几百

单例是一种常见的设计模式,要求类的对象只能创建一次。一次保持着唯一的一个对象的地址。

这样的类我们就称为单例类。

2.1作用

保存属性生成的私有的成员变量。保存私有变量的,如果你想在类外访问私有的数据 通过单例来访问。

第二个 做音乐播放器 使用或系统中默写功能都是单例。

2.2分类

1.MRC  手动引用计数中非完全单例

static 但单例类 *指针=nil;

+(单例类 *)shareInstace

{

if(!指针)

{

指针=[[单例类 alloc]init];

}

return self;

}

2.完全单例

需要重写NSObject类中所有关于内存管理的函数,释放  拷贝(深  浅)等函数。

3.ARC自动引用计数  线程安全的  单例类

通过GCD 和  单例类实现一个可以在多线程中使用的基于ARC的单例。

3.分类、类别、类目

分类是OC中一种特殊的语法,是类的一种动态的扩展机制。

提供的功能是在不知道类的源代码的情况下,对类可以进行扩展的一种机制。

1.分类又分两种

2.有名分类(有名类别)

所谓有名类别就是指给类的分类起一个名称

只能扩展类的方法,不能扩展类的成员。

扩展方法:

可以扩展一个  + 方法

可以扩展一个  -  方法

语法格式:

分类的声明部分:

Student +分类的名称.h

@interface Student(分类的名称)

//只能声明方法

+(Student *)createStudent;

-(void)showStudentAllInformation;

@end

分类的实现部分:

Student +分类的名称.m

@implementation Student(分类的名称)

+(Student *)createStudent

{

 

 

}

-(void)showStudentAllInformation

{

 

 

}

demo-5

2.匿名分类(匿名类别)类的扩展

匿名分类(类别)也叫类的扩展,用途比较广,开发中经常用到,现在你Xcode创建一个新的UI工程,自带一个匿名分

类,我们一般轻快下都称为是类扩展。

一般我们要扩展的.m文件中,通常用来扩展私有的属性或成员或函数(方法)

匿名分类(类别 类扩展)的作用

不但能够扩展成员变量  还能扩展方法和属性

匿名分类语法:

@interface 类名()

{

NSUInteger _age;

}

@end

      @interface Student : NSObject

      {

         NSUInteger _age;

      }

      -(void)setAge:(NSUInteger)age;

      -(NSUInteger)age;

 @end

2.为什么要使用分类?

1.因为OC中的继承都是单继承,只有一个父类,不能多继承,一旦这个父类被占用,就没有其他的父类的名额。

2.可以使用分类,分类扩展类比较灵活。可以不借助继承关系就可以直接对类进行扩展。

3.分类可以起到分散接口(方法)的作用。

4.早起的OC版本中  OC中没有协议的概念,可以通过NSOBject这类的一个分类 使实现 非正式协议。

来实现OC中涉及迷失中的非正式协议的委托(代理)。实际有三种

 

3.面试题

1.OC中有没有私有的成员变量?

2.OC中有没有私有的方法?如果有 怎么实现?

3.类扩展和分类有什么区别?

4.私有的方法如何调用?

[self  类内]

5.私有的成员变量在类外如何访问?

单例

 

4.协议  @protocol

4.1什么是协议?

协议也叫正式协议。所谓正式协议是一种OC中特有的语法,通过@protocol声明协议,协议是一个公有的方法列表。

只有声明部分,没有实现部分。

4.2协议中的方法列表

1.可选的方法

 

2.必选飞方法

4.3为什么要使用协议

使用协议的好处

1.可以起到分散接口的作用,把协议中的方法分散到实现协议的类中去。

2.通过协议实现(接口的)多继承

3.使用协议实现协议委托 ——委托的设计模式

4.使用协议可以实现委托传值

5.使用协议能够让一个类更加具有通用性。

4.4怎么使用协议

1.使用正式协议

第一步:制定协议

协议名称的命名规范:协议的名称必须是    类名+协议名   或   类名+Delegate

@protocol   协议名称

//声明在协议中的方法。

@end

 

第二步:采纳协议   也叫遵守协议

@interface 类名:父类名  <协议的名称>

第三步:遵守协议的目的 是为了实现协议中的方法

1.凡是必须要实现的就必须得在遵守该协议的类中实现

2.凡是可选的方法 可以根据自己的实际情况选择性的来实现。

 

5.委托(代理)   [有协议必有委托]

设计模式中的一种,委托是两个对象之间的关系。两个对象之间通讯的一种方式。

当一个对象 想做一件事却没有能力做,另一个对象恰好能做这件事,那么我们就可以委托另外一个由能力去做这件事的对象去做。

例子:挂失银行卡   中介找房   玩lol送女友

 

1.委托类——委托人的属性 id<遵守协议>delegate(代理人)

|

协议————>约束了 委托的事件

1.帮我打LOL  WOW,赢了请你吃饭

2.队友特别给力再来一局

                                  ^

                                    |

                                  |  实现方法

   2.被委托类(代理类  受托类) <遵守协议> ———>             demo-9  

 

 

作业:

1.熟练掌握  协议委托 (LOL 妈妈保姆的例子0必会)

2.掌握 类的扩展 和 分类  掌握私有方法调用  私有成员保存

3.掌握 协议

 

编程题:

1. 你委托 你的女朋友 给你买一瓶可乐。因为你正在看NBA。

2.你委托 你的老爸  去ICBC银行挂失你得银行卡。因为你在上

    学。

3.你委托 链家地产  给你租房  1.三居室  2.能洗澡  3.能做饭  4.有

    宽带  5.必须是女性邻居

 

0 0
原创粉丝点击