黑马程序员IOS-OC语言-分类、协议

来源:互联网 发布:apache index.html 编辑:程序博客网 时间:2024/05/29 05:56

——- android培训、java培训、期待与您交流! ———-


分类(Category)

分类 : 在不改变原来模型(类内容)的前提下,扩充类的方法

扩充类的方法有两种:继承、分类(Category)

习惯将声明文件和实现文件名称统一采用”原类名+Category名称.m/.h”的方式命名

如 : NSString 的分类可以命名为 NSString+Tools.h

分类格式

// 分类的声明@interface 类名(分类名称)    // 方法声明@end// 分类的实现@interface 类名(分类名称)    // 方法实现@end

注意:

Category 可以访问原始类的成员变量,但不能添加成员变量,只能添加方法。

Category 可以实现原始类的方法,但是会替换原来的方法,要重载最后是创建子类。优先调用分类同名中的方法

方法调用的优先级: 分类(最后编译的父类优先) –> 本身类 –> 父类

多个 Category 中如果实现了相同的方法,只有最后一个参与编译的才有效(最终覆盖)

分类中定义的类方法,调用时使用被分类的类名即为原类 Person   分类 Person+Xxx 中定义的类方法yyyZzz调用该类方法用 [Person yyyZzz] 即可

protocol (协议)

协议 : 在 .h 文件中有声明方法,类遵守协议后可以调用里面的方法,自己重写这些方法

声明类:    @class 类名;声明协议(protocol):    @protocol 协议名;确实要调用,需要在.m文件中#import 需要调用类(协议)的头文件(.h)

协议中方法声明的关键字

@required : 必需的,必须实现的方法,否则会后警告(默认)@optional : 可选的,不要求实现,不会有警告

类继承类 : 父类只能有一个    类名 : 父类名    @interface 类名 : 父类名类、协议实现协议时 : 实现协议可以同时有多个    类名(或者协议名) <需实现协议名>

类遵守协议

@interface 类名 : 父类名 <协议1,协议2,...>    /**/@end

协议遵守协议

@protocol 协议名 <其他协议1,其他协议2,...>    /**/@end

可以用 conformsToProtocol 判断某个类是否实现了某个协议:

[obj conformsToProtocol : @protocol(MyDelegate)];

定义指针变量时就限制该变量要保存的变量

类名<协议名称> *变量名;   // 该变量可以存储的变量必须遵循<协议>

@property 中声明的成员变量限制要保持的变量

@property (nonatomic , strong) 类名<协议名称> *成员变量名;

——- android培训、java培训、期待与您交流! ———-

0 0