1.通过委托协议和数据源协议进行数据通信
(1)自定义协议需要定义协议方法和协议属性,属性必须为weak防止循环引用。
(2)实现委托对象的办法是声明某个类遵从委托协议,然后将协议中的方法在类中进行实现。
(3)协议方法的一般调用:
if([_delegate respondsToSelector:@selector(getData)]) {
[_delegate getData];
}
但有必要,可实现含有位段的结构体,将委托对象是否响应相关协议方法这一信息缓存在其中。
@interface WXCEShiViewController (){
struct {
unsigned int didRecter : 1;
}_delegateFlag;
}
@end
@implementation WXCEShiViewController
- (void) setDelegate:(id<wxceshiDelegate>)delegate{
_delegate = delegate;
_delegateFlag.didRecter = [delegate respondsToSelector:@selector(getData)];
}
- (void)viewDidLoad {
[super viewDidLoad];
//主要是为了避免重复判断选择器从而影响到性能
if(_delegateFlag.didRecter) {
[_delegate getData];
}
}
2.按逻辑将类的实现代码分散到便于管理的几个分类当中
使用分类将实现代码划分为易于管理的小块。将应该视为私有的方法归入名为Private的分类中,以影藏实现的细节。
3.总是为第三方类进行名称前的点缀(加上你专有的点缀)
4.勿在分类中声明属性,除了class-continuation分类之外,可以定义存取方法,尽量不要定义属性。
5.使用class-continuation分类新增实例变量可在该分类中对内部可将属性进行扩展。
遵从协议一般也在分类中进行声明。