1、建立协议
2、实现协议方法
3、调用协议方法
调用者只需要知道协议名称和方法结果,不用管究竟是谁实现的。很牛的样子啊:)
最近在读一本书,尽量第一把protocol单独写成一个.h文件,其次,尽量把protocol调用放在用匿名category中。。。觉得挺在理的,分享下。
有空看看《设计模式》,码农必看的书,在入门一段时间后就该看看这本书了,但不建议刚开始做开发的时候看,没有一定经验,见过代码太少的话看了也没体会。
block其实用起来很简单,远比delegate简单,如果你写过javascript,尤其是用过jquery这类框架的话,应该会对block的模式很熟悉。只是在objc里用block还是得注意一些,尤其是要考虑block的实现者与使用者的生存期差异问题。Delegate呢其实更“优雅”一点,从设计模式的角度来讲,但block会更方便。不是什么时候都该用block来替代delegate的,例如是你需要的delegate里有比较多特性的话。
用category要注意一般不能给原类增加property的,只能增加方法。非要增加property的话有方法,但会比较麻烦,要慎用。
11楼 很简单,因为你自己的类implementation和匿名category的implementation都在同一个.m文件里,当然可以有property啦。但是如果你是扩展别人的类,类的implementation已经是写好的了,就是说类所占的空间是已经确定的,你要改变类的占用空间当然是不合法的啦。
objc之所以会有category这种不用继承就实现扩展的方式,是因为objc里所有的方法调用都是消息机制的,增加一个方法其实并不会对类结构有任何改变,只是向这个类的实例发送消息而已。但是在category里增加property是会类结构的。
另外再说说,我一般都会在任何一个我自己定义的类的.m文件里假如一个匿名category,会把所有“私有”proptery都定义在这个category里。objc本身是没有public/private这种声明的,所有在.h文件里声明的property都是可以公开的。我借用category来在.m内部声明property,这样就避免了从.h文件直接公开私有属性。
你说的是指的是在.m里这样搞吗:
@interface myClass (addProperty)
@property addProperty;
@end
@implementation myClass(addProperty)
@synthesize addProperty;
@end
@implementation myClass
@end
@interface myClass () //Category不需要名字
@property addproperty;
@end
@implementation myClass
@synthesize addproperty; //这个东西已经不需要了,没看文档吗?sdk6.0之后就不需要了。
//bala bala bala
@end
头文件是c/c++留下来的模式,先去学习一下c吧。简单来说,c/c++/objc要提供库给他人使用时,至少需要两样东西:1)头文件,2)静态库或动态库。