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 扩展与协议的区别:协议可以被任何类采纳。但扩展只属于主类

0 0
原创粉丝点击