您的位置:首页 > 移动开发 > IOS开发

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

@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 扩展与协议的区别:协议可以被任何类采纳。但扩展只属于主类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: