M牛C原创博客——oc 组合、聚合、协议、分类、拓展、

1.组合和聚合模式

两个对象之间的代码复用关系,代码结构上来讲是低耦合。(继承中的两个对象之间的代码复用关系是高耦合的)

组合:对象的使用是紧耦合的,创建Computer对象会自动的同时创建Cpu对象。(一体机、笔记本)

优:代码的使用是非常简单的。

缺:灵活度不高。

系统的功能。。。

控制器(UIViewController)与视图(UIView)

聚合:对象的使用是松耦合的,创建Computer对象是不会自动的同时创建Cpu对象,需要手动自己指定Cpu对象,如果Cpu对象满足不了需要是可以替换的。(兼容机)

优:灵活度高。

缺:代码的使用略微复杂。

自定义控件:

TRTableView

TRTableViewCell

2.协议

也可以增强一个类的能力,但是需要修改类的源代码。

协议是对象与对象之间的一种约束。

a.语法规则

@protocol 协议名 <父协议>

@required 属性或方法 必须实现的属性和方法

@optional 属性或方法 可选实现的属性和方法

属性或方法 必须实现的属性和方法

@end

b.协议的使用

(1)遵守协议

@interface 类:父类 <协议名>

(2)实现协议中的方法

(3)使用协议的引用指向遵守协议的对象

id<协议名> obj = 遵守协议的对象;

只用使用协议中要求的属性和方法

c.协议也可以使用在数组、参数、返回值类型中,与多态相似。

多态与协议的区别:

父类引用指向子类对象或本类对象。(类与类之间)

协议引用指向遵守协议的对象。(协议与类之间)

d.协议也有继承关系

协议的继承,也相当于协议的合并。

父协议:method

子协议:method2

@protocol 子协议 <父协议>

类<子协议> -> 同时实例method方法与method2方法

e.一个类也可以遵守多个协议,协议与协议之间使用”,”分隔开。

类<协议1,协议2>

f.协议中的属性 必须要合成@synthesize

3.分类

即可以有选择的添加能力,又不需要改变类的本质。

使用步骤:

(1)创建分类

主类类名+分类类名.h

@interface 主类类名(分类类名)

添加方法的声明

@end

主类类名+分类类名.m

@implementation 主类类名(分类类名)

添加方法的实现@end

(2)导入头文件 才可以使用分类的能力

#import “主类类名+分类类名.h”

(3)直接向对象发送分类消息

[对象引用 添加方法];


使用分类要注意的事项:

a.在分类中,不可以定义实例变量,自然使用属性也没有意义了。

b.在分类中,不可以声明式属性自动生成的实例变量,但可以访问手动生成的实例变量,在分类当中可以调用主类的属性。

c.分类不但可以给自定义的类添加能力,还可以给系统的类添加能力。

NSString字符串 

访问网络的能力 connect…

4.扩展(延展)

给类添加一个私有的能力。

扩展是一种特殊的分类。

扩展通常定义在类的.m文件中,也可以定义在其它文件.h文件中。

通常在扩展里面添加私有的实例变量、方法、属性。

补充:

在扩展中可以声明实例变量,自然也可以声明属性。

扩展只能在类的.m文件中使用。

扩展是用来声明私有的属性和方法。

分类与扩展区分

共同点:都可以给类添加能力。

不同点:

分类:添加公有能力,在分类中是不可以定义实例变量的,分类是有名字的,分类的文件中:主类类名+分类类名.h

扩展:添加私有能力,在扩展中是可以定义实例变量的,扩展是没有名字的,扩展的文件中:主类类名_扩展的文件名.h


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值