黑马程序员——IOS基础——Protocol协议

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

MyProtocal1.h://这是协议类
#import <Foundation/Foundation.h>
@protocol MyProtocol1 <NSObject> //这是基协议,一定要遵守
@required //默认required,必须要实现
- (void)test1;
- (void)test2;
@optional //可选实现
- (void)test3;
@end

MyProtocal2.h://这是协议类

#import <Foundation/Foundation.h>
@protocol MyProtocol2
- (void)haha2;
@optional
- (void)haha3;
@end


只要一个类遵守了一份协议,就能拥有这份协议中的所有方法声明
协议不能写实现,仅仅添加方法声明
协议和分类一样,不能写成员变量
 : 继承父类
 <> 遵守协议


Person.h:
#import <Foundation/Foundation.h>
#import "MyProtocol1.h"
#import "MyProtocol2.h"
@interface Person : NSObject <MyProtocol1,MyProtocol2> //类似java中的接口,OC也可以实现多个协议
@end

基本用途:
>可以声明一堆方法,单不能声明成员变量
>只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明
>只要父类遵守了某个协议,就相当于子类也遵守了
>用于代理模式和观察者模式
>一个协议可以遵守另一个协议:


@protocol MyProtocol2 <MyProtocol1>
- (void)haha;
@end

1.协议的定义:
@protocol 协议名称 <NSObject>
//方法声明列表
@end


2.如何遵守协议
>类遵守协议:
@interface 类名 : 父类名 <协议名称1,协议名称2>
@end
>协议遵守协议
@protocol 协议名称 <其他协议名称1,其他协议名称2>
@end
3.协议中方法声明的关键字
>@required(默认) :要求实现声明此关键字的方法,如果没有实现,会发出警告
>@optional : 可选实现,不会有警告
4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议
类名<协议名称> *变量名
id<协议名称> 变量名
NSObject<MyProtocol> *obj;
id<MyProtocol>obj2;
5.@property中声明的属性也可用做一个遵守协议的限制
@property (nonatomic, strong) 类名<协议名称> *属性名

@property (nonatomic, strong) id<协议名称> 属性名    //id就相当于   类名*

6.协议可以定义在单独.h文件中,也可以定义在某一类中
>如果这个协议只用在某个类中,应该把协议定义在该类中
>若果这个协议用在很多类中,就应该定义在单独文件中


7.分类可以定义在单独.h和.m文件中,也可以定义在原来类中
>一般情况下,都是定义在单独文件
>定义在原来类中的分类,只要求能看懂语法








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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值