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

——- 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值