作者:朱克锋
邮箱:zhukefeng@iboxpay.com
转载请注明出处:http://blog.csdn.net/linux_zkf
委托代理(degegate),顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中,首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。
头文件:
声明代理类与方法
一般可分为必须实现的方法和选择实现的方法,这里仅声明必须实现的方法
#import <Foundation/Foundation.h>
@protocol TestDelegate <NSObject>
- (void) reqMethod;
@optional
- (void) reqMethodOther;
@end
声明使用代理的类
@interface TestClassObj :NSObject
{
id <TestDelegate> delegate;这里的delegate为普通的名字,一般都用delegate,例如你写为zhangsan也行呵呵呵
}
+ (TestClassObj *) testObj;
- (void) testMethod;
@property (nonatomic,retain) id <TestDelegate> delegate;
@end
实现类:
#import "TestDelegateObj.h"
@implementation TestClassObj
@synthesize delegate;
- (id) init
{
if (!(self = [superinit])) returnself;
self.delegate =nil;
return self;
}
- (void) testMethod
{
if (!self.delegate)return;
使用delegate时要注意这里的书写方式
if ([self.delegate respondsToSelector:@selector(reMethod)])
[self.delegatereMethod];
}
+ (TestClassObj *) testObj
{
return [[[JackInTheBox alloc] init] autorelease];
}
@end
使用分析
@interface TestViewController : UIViewController <TestDelegate>
{
TestClassObj * testObj;
}
@property (nonatomic, retain) TestClassObj * testObj;
@end
@implementation TestBedViewController
@synthesize testObj;
- (void) viewDidLoad
{
self. testObj = [TestClassObj testObj];
self .testObj.delegate = self;
}
- (void) actionButtonPressed: (id) sender
{
[jack testMethod];
}
这是必须要实现的方法
-(void)reMethod
{
NSLog(@"re method test");
}