Protocol

  • 协议里面不能声明变量,只能定义方法。
  • 一个类要遵守某个协议,如果没有实现协议的方法,不会报错,只会有警告。
  • 协议间的遵守,基协议(类似于继承,协议B可以继承协议A,此刻协议B也拥有协议A里面的方法)

协议A----- MyProtocol

#import <Foundation/Foundation.h>

@protocol MyProtocol
/*!
 *  协议默认是必须实现的
 *
 */
@required
- (void)test1;
/*!
 *  optional 表示可选的
 *
 */
@optional
- (void)test2;

@end

协议B----- MyProtocol1

#import <Foundation/Foundation.h>
#import "MyProtocol.h"

@protocol MyProtocol1 <MyProtocol>

- (void)test3;

@end
  • 比如Person类遵守协议B,那Person类就要实现协议B里面的test3方法以及协议A里面的test1方法。

要求:obj1保存的对象必须遵守MyProtocol1这个协议

//1
NSObject<MyProtocol1> *obj1 = [[Person alloc] init];
//2
id<MyProtocol1> obj2 = [[Person alloc] init];
//3
Person<MyProtocol1> *obj3 = [[Person alloc] init];
  • 为了提高性能,我们要用到的时候才import协议。说明白点就是,你可以在.h文件里面像@class一样先@protocol一个协议,告诉编译器,我这是一个协议(此刻我并不关心协议的具体内容)。然后使用到的时候才在.m文件里面import这个协议的头文件
#import <Foundation/Foundation.h>

@protocol MyProtocol1

@end

@interface Person : NSObject <MyProtocol1>

@end
#import "Person.h"
#import "MyProtocol1.h"

@implementation Person

- (void)test1 {

}

- (void)test3 {

}
@end

定义一个变量的时候,限制它遵守某个协议(和上面类似)

NSArray<MyProtocol> *obj;

@property(nonatomic, strong) NSArray<MyProtocol> *obj1;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容