标签:class blog code java http tar
刚开始接触iOS,对delegate、protocol这两个概念比较模糊。参考了一些资料,记录下来体会。
@protocol myProtocol <NSObject> @required - (int)add:(int) a and:(int)b; @optional - (int)minus:(int)a and:(int)b; @end这里还有两个关键字,@required和@optional,一个是必须实现的,一个是可选的。可以根据名字直接判断。
@interface text : NSObject<myProtocol> @end定义一个类来使用protocol,用尖括号(<...>)括起来的就是我们定义的protocol,如果要采用多个Protocol,可以在尖括号内引入多个Protocol名称,并用逗号隔开即可。
@implementation text
- (int)add:(int)a and:(int)b{
return a + b;
}
- (int)minus:(int)a and:(int)b{
if (a >= b) {
return a - b;
}
else
return b - a;
}
@end
#import <UIKit/UIKit.h> @protocol queryDelegate <NSObject> - (NSString *)query; @end @interface Person1 : UIViewController<queryDelegate> @end
- (NSString *)query{
NSString * result = [NSString stringWithFormat:@"热火赢太阳:103比98"];
return result;
}
#import <UIKit/UIKit.h> #import "Person1.h" @interface Person2 : UIViewController<queryDelegate> @end
- (NSString *)query{
NSString * data =[NSString stringWithFormat:@"詹姆斯的数据是37分9篮板3助攻" ];
return data;
}
#import <UIKit/UIKit.h> #import "Person1.h" #import "Person2.h" @interface delegateViewController : UIViewController @property (weak,nonatomic) id<queryDelegate> delegate;//声明delegate - (IBAction)button1Action:(id)sender; - (IBAction)button2Action:(id)sender; @property (weak, nonatomic) IBOutlet UILabel *labelResult; @property (weak, nonatomic) IBOutlet UILabel *labelData; @end
#import "delegateViewController.h"
@interface delegateViewController ()
@end
@implementation delegateViewController
@synthesize labelData;
@synthesize labelResult;
.....
- (IBAction)button1Action:(id)sender {
Person1 *pe1 = [[Person1 alloc] init];
self.delegate = pe1;//设置代理对象为person1
NSString * result = [self.delegate query];//通过委托变量调用委托方法
[labelResult setText:result];
}
- (IBAction)button2Action:(id)sender {
Person2 *pe2 = [[Person2 alloc]init];
self.delegate = pe2;//设置代理对象为person2
NSString* data = [self.delegate query] //通过委托变量调用委托方法
[labelData setText:data];
}
@interface ClassC {
id delegate;
}
@end
首先定义一个id类型的变量,名字叫做delegate。那么ClassC的实现(.m文件)里就可以用delegate这个变量了。当然这里完全可以用其它名字而不是delegate。@interface ClassC {
ClassB *delegate;
}
@end
这样我们知道了delegate是一个ClassB,它就可以提供ClassB里的方法。可以把一部分ClassC里的工作放在ClassB里去实现。这样的写法看起来是不是有点奇怪?或者应该写成这样?@interface ClassC {
ClassB *classB;
}
@end
- (void)doSomething {
[self blahblah];
[self.delegate guruguru];//放到delegate中去执行这个guruguru函数
[self blahblah];
}
delegate是我们写的类,这个类如果可以被传给UITableView做为其delegate,那唯一要求,就是它实现了- (void)guruguru;这个方法。
@protocol XXXProtocol - (void)guruguru; @end
转iOS中delegate、protocol的关系,布布扣,bubuko.com
标签:class blog code java http tar
原文地址:http://www.cnblogs.com/baiyu/p/3807104.html