IOS协议·IOS分类·IOS扩展(总结)
来源:互联网 发布:淘宝网店进货 编辑:程序博客网 时间:2024/05/22 09:46
1.协议
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扩展(总结)
- iOS 分类和扩展
- iOS:分类、协议、代理
- iOS杂记——category分类、extension扩展、protocol协议
- IOS开发-分类与扩展
- IOS开发之分类扩展
- iOS 分类(category)、扩展(Extension)
- Protocol 协议总结 - iOS
- ios之浅谈分类、类的扩展、协议以及协议的使用
- Category 分类、类别 总结 - iOS
- [ios基础]大白话解释分类和扩展
- iOS - 类扩展与分类的区别
- iOS - 类扩展与分类的区别
- iOS - 类扩展与分类的区别
- 关于iOS 分类和扩展的区别
- iOS 工作之余小总结(二)类的高度总结----封装,继承,派生,重写,多态,协议,分类,扩展,组合,聚合。
- ios扩展
- 黑马程序员IOS-OC语言-分类、协议
- 服务与活动之间如何产生联系
- JSP(7)关于刷新持续发送请求的处理
- Java 实例
- VMware-tools安装
- matlab下 ROC和AUC的实现
- IOS协议·IOS分类·IOS扩展(总结)
- 【java学习】字符串
- axure8 实例2 简单的轮播图效果
- 《人民的名义》之陆毅的演技
- swift 3.0 数组赋值
- 杭电oj(Java版)—— 2602 Bone Collector—— 01背包问题
- 最大连续子序列 (dp)HDU 1231
- Box UVA
- 最大子段和 (含变形)【dp】