如何定义一个符合Cocoa风格的Protocol
首先Protocol一般来讲是针对某个类的的Delegate,比如TextField的TextFiledDelegate,有时一个Class也可以有多个Delegate.
Cocoa风格必备要素
一般来说有以下几点
- 名为ClassName的Class
- 在ClassName后直接加「Delegate」作为协议名的Protocol
- Class中有一个id指针类型的属性
- id指针为弱指针,切遵循「ClassNameDelegate」协议,放在头文件中
- id指针的变量名为小写「delegate」
- Protocol中所有的函数以Class的名打头
- 接着写上具体处理事物的说明
- 第一个参数必须是Class本身(不管是否需要都要传)
- 之后再跟上DoSomething必要参数
例如
@class ClassName;
@protocol ClassNameDelegate <NSObject>
- (void)classNameDoSomething:(ClassName *)className parameter:(NSString *)parameter;
@end
@interface ClassName : NSObject
@property (nonatomic, weak) id<ClassNameDelegate> delegate;
@end
常见错误
根据以下代码分析
@class ClassName;
//delegate名和class不统一
@protocol xxxxDoDelegate <NSObject>
//方法名没有以class名开头
//方法第一个参数没有穿class本身,导致参数也不明所以
- (void)somethingandsomedo:(NSString *)parameter;
@end
@interface ClassName : NSObject
//id类型指针的变量名不为delegate且不明所以
@property (nonatomic, weak) id<xxxxDoDelegate> xxxpoint;
@end