IOS协议·IOS分类·IOS扩展(总结)
2017-04-26 22:07
218 查看
1.协议
1.1 是一种要求,或是一种规则
1.2 对应程序来讲,是只生成方法的声明,不实现
1.3 协议必须被某个类采纳,且在该类中给出协议中声明的方法函数体
1.4 对于采纳协议类的对象,可以和其它对象一样使用
1.5 协议可以被继承,包括多个父协议
1.6 协议可以被多重采纳
下面一起看一下简单的demo理解协议的使用
定义协议MyProtocol.h
.h中< >遵守协议
.m中实现协议方法
2.分类
2.1 将一个复杂的类分成若干个模块儿,其中每个模块儿被称为一个分类
2.2 分类的作用是降低耦合度
2.3 分类的语法
2.4 在使用带分类的类时,只能看到主类,不会看到分类
2.5 分类中不能定义成员变量或属性
2.6 可以给没有源代码的类添加分类
2.7 添加到主类中的分类可以被子类继承
2.8 要注意,添加到分类中的方法名不要和主类中的方法名重名,如果重名,主类中的方法将被隐藏
分类我们通常用到的情况是,对于已有的类增加一些功能。比如我们经常会用到把字符串转为NSURL那么我们就可以添加这样一个分类
.h中公开方法
.m中实现转换方法
这样在所有的nsstring的对象中都可以调用yx_URL ,直接将当前字符串转换成NSURL类型。
3.扩展
3.1 扩展很像一个没有名字的分类
3.2 用于定义类中的私有成员变量、属性或方法
3.3 两种语法形式
3.3.1 单独写在一个.h文件中,扩展中的成员变量默认是私有的,属性和方法默认是公有的。但支持修改访问权限
3.3.2 将扩展写在主类的.m文件中,此时扩展中的成员变量、属性和方法都是私有的
在ios中扩展其实我们经常使用,只不过不知道叫什么而已。比如我们在xib搭建界面的时候,需要把控件拖拽成属性或是添加某些控件为全局属性,就会在.m中看到这样的代码。这就是扩展
下面总结一下区别:
4 扩展与分类的区别
4.1 有没有.m文件,扩展没有,分类有
4.2 有没有成员变量或属性,扩展中有,分类中没有
5 扩展与协议的区别:协议可以被任何类采纳。但扩展只属于主类
1.1 是一种要求,或是一种规则
1.2 对应程序来讲,是只生成方法的声明,不实现
1.3 协议必须被某个类采纳,且在该类中给出协议中声明的方法函数体
1.4 对于采纳协议类的对象,可以和其它对象一样使用
1.5 协议可以被继承,包括多个父协议
1.6 协议可以被多重采纳
下面一起看一下简单的demo理解协议的使用
定义协议MyProtocol.h
@protocol MyProtocol <NSObject> @property NSString *content; -(NSString*)show; @end
.h中< >遵守协议
@interface TRMyClass : NSObject<MyProtocol> @end
.m中实现协议方法
@implementation MyClass @synthesize content = _content; -(NSString*)show { return [NSString stringWithFormat:@"秀一下,%@", self.content]; } @end
2.分类
2.1 将一个复杂的类分成若干个模块儿,其中每个模块儿被称为一个分类
2.2 分类的作用是降低耦合度
2.3 分类的语法
2.4 在使用带分类的类时,只能看到主类,不会看到分类
2.5 分类中不能定义成员变量或属性
2.6 可以给没有源代码的类添加分类
2.7 添加到主类中的分类可以被子类继承
2.8 要注意,添加到分类中的方法名不要和主类中的方法名重名,如果重名,主类中的方法将被隐藏
分类我们通常用到的情况是,对于已有的类增加一些功能。比如我们经常会用到把字符串转为NSURL那么我们就可以添加这样一个分类
.h中公开方法
@interface NSString (YX) - (NSURL *)yx_URL; @end
.m中实现转换方法
@implementation NSString (YX) - (NSURL *)yx_URL{ return [NSURL URLWithString:self]; } @end
这样在所有的nsstring的对象中都可以调用yx_URL ,直接将当前字符串转换成NSURL类型。
3.扩展
3.1 扩展很像一个没有名字的分类
3.2 用于定义类中的私有成员变量、属性或方法
3.3 两种语法形式
3.3.1 单独写在一个.h文件中,扩展中的成员变量默认是私有的,属性和方法默认是公有的。但支持修改访问权限
3.3.2 将扩展写在主类的.m文件中,此时扩展中的成员变量、属性和方法都是私有的
在ios中扩展其实我们经常使用,只不过不知道叫什么而已。比如我们在xib搭建界面的时候,需要把控件拖拽成属性或是添加某些控件为全局属性,就会在.m中看到这样的代码。这就是扩展
@interface RecommendTableViewController ()<UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout> @property (nonatomic, strong)RootModel *rootModel; @property (nonatomic, strong)UICollectionView *cv; @property (nonatomic, strong)HomeLoopView *loopView; @end
下面总结一下区别:
4 扩展与分类的区别
4.1 有没有.m文件,扩展没有,分类有
4.2 有没有成员变量或属性,扩展中有,分类中没有
5 扩展与协议的区别:协议可以被任何类采纳。但扩展只属于主类
相关文章推荐
- iOS 工作之余小总结(二)类的高度总结----封装,继承,派生,重写,多态,协议,分类,扩展,组合,聚合。
- ios之浅谈分类、类的扩展、协议以及协议的使用
- iOS分类和扩展(Categories和Extensions)
- iOS培训教程之Objective C——分类和协议
- iOS开发系列--Objective-C之协议、代码块、分类
- 【iOS】Swift中扩展extension与协议protocol
- IOS开发-分类与扩展
- IOS面试题之委托,协议与分类
- 分类、扩展和协议
- 开发腾讯移动游戏平台SDK ios版Ane扩展 总结
- 开发腾讯移动游戏平台SDK ios版Ane扩展 总结
- Arc 自动内存管理 分类Category 类扩展 Block 代码段 和 Protocol协议的一些简单知识的总结
- iPhone/iOS Core Animation开发总结(CALayer) 分类: iphone开发总结
- Objective-C分类 (category),扩展(Extension)和协议(protocol)
- 【IOS学习】之四、协议,委托,分类粗解
- iOS中Category类别(扩展类)专题总结
- (转)iOS分类和扩展(Categories和Extensions)
- 【IOS学习】之四、协议,委托,分类粗解
- Objective-C——Message(消息)、Category(分类) 、Protocol(协议) 总结
- 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol