有时我们需要在一个已经定义好的类中增加一些方法,而不想去重新写该类。比如当
工程已经很大,代码量比较多,或者类中已经抱住很多方法,已经有其他代码调用了该
类创建对象并使用该类的方法时,可以使用类别对该类的扩充新的方法。
注意:类别只能扩充方法,而不能扩充成员变量。
委托(举例)
委托代理(degegate),顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象
就是这个对象的代理,代替它来打理要做的事。反映到程序中,首先要明确一个对象的委托方是哪个对象,委托所做
的内容是什么。
委托机制是一种设计模式,在很多语言中都用的,这只是个通用的思想,网上会有很多关关于这方面的介绍。
那么在苹果开发过程中,用到的委托的程序实现思想如下,我主要拿如何在视图之间传输信息做个例子。
譬如:在两个页面(UIView视图对象)实现传值,用委托(delegate)可以很好做到!
方法:
类A
@interface A: UIView
id transparendValue Delegage;
@property(nomatic,retain) id transparendValueDelegate;
@end
@implemtion A
@synthsize transparendValue Deleagate
-(void)Function
{
NSString* value=@"hello";
//让代理对象执行transparendValue动作
[transparendValueDegegate transparendValue:value];
}
@end
类B
@interface B:UIView
NSString* value;
@end
@implemtion B
-(void)transparendValue:(NSString*)fromValue
{
value=fromValue;
NSLog(@"the value is %@",value);
}
@end
//下面的设置A代理委托对象为B
//在定义A和B类对象处:
A*a=[[A alloc]init];
B*b=[[B alloc]init];
a.transparendValueDelegate=b;//设置对象a代理b
这样在视图A和B之间可以通过委托来传值!
下面这个例子委托有两类:
1.一个视图类对象的代理对象为父视图,子视图用代理实现让父视图显示别的子视图
2,同一个父视图下的一个子视图为另一个子视图的代理对象,让另一个子视图改变自身背景为给定颜色
规范格式如下:
@protocal TransparendValueDelegate;
@interface A:UIView
id<TransparendValueDelegate>m_dTransparendValueDelegate;
@property(nomatic,retain)id m_dTransparendValueDelegate;
@end
//代理协议的声明
@protocal transparendValueDelegate<NSObject>
{
-(void)transparendValue:(NSString*)fromValue;
}