oc学习之旅:协议
来源:互联网 发布:河南网络信访平台 编辑:程序博客网 时间:2024/05/29 05:05
构造一个士兵代理教官的开火的方法,并返回一个对话,教官有相应的对话,然后让士兵去执行。
main
#import <Foundation/Foundation.h>
#import "Master.h"
#import "Solider.h"
int main(int argc,const char * argv[])
{
@autoreleasepool {
Master *master = [[[Masteralloc] init]autorelease];
Solider *solider =[[[Solideralloc] init]autorelease];
NSLog(@"%p",solider);
master.delegate =solider;//必须若引用,不然释放时候会出现问题
[masterorder];
//保证main函数不退出
while (1) {
[[NSRunLoopcurrentRunLoop] run];
}
}
return 0;
}
FireProtocol.h协议
- (void) fire;
- (NSInteger) fireOne:(NSInteger) index;
被代理master.h
#import "FireProtocol.h"
@interface Master :NSObject
{
id <FireProtocol>_delegate;
}
@property (nonatomic,assign)id<FireProtocol> delegate;
-(void)order;
master.m
{
NSArray *arr;
NSInteger count;
}
@synthesize delegate =_delegate;
- (id)init
{
self = [superinit];
if (self) {
arr =[[NSArrayalloc]initWithObjects:@"111",@"222",@"333",nil];
count = 0;
[NSTimerscheduledTimerWithTimeInterval:1.0target:selfselector:@selector(order)userInfo:nilrepeats:YES];
}
return self;
}
-(void)order
{
//delegate已经指向了士兵了
NSLog(@"del %@",[_delegateclass]);
if (_delegate &&[_delegaterespondsToSelector:@selector(fire)]) {
//用一个对象的指针引用了另一个对象的空间
[_delegatefire];
// NSInteger temp = [_delegate fireOne:0];
// while (1) {
// switch (temp) {
// case 0:
// NSLog(@"赶紧上!");
// temp = [_delegate fireOne:1];
// break;
// case 1:
// NSLog(@"你们这群废物tm给我上!");
// temp = [_delegate fireOne:2];
// break;
// default:
// break;
// }
// if(temp == 3) break;
// }
//调用代理方法另一种形式
//不带参
//[_delegate performSelector:@selector(fireOne:)];
//带参
// [_delegate performSelector:<#(SEL)#> withObject:<#(id)#>];
if (count <arr.count) {
NSLog(@"%@:%@",[selfclass],arr[count]);
count = [_delegatefireOne:count];
}
}
}
代理Solider.h
#import <Foundation/Foundation.h>
#import "FireProtocol.h"
@interface Solider :NSObject<FireProtocol>
@end
solider.m
{
NSArray *arr;
}
- (id)init
{
self = [superinit];
if (self) {
arr = [[NSArrayalloc] initWithObjects:@"队长 AOE太猛了",@"队长死了赶紧跑",@"还好哥没死",nil];
}
return self;
}
#pragma mark - FireProtocal
-(void)fire
{
NSLog(@"gogogo");
}
-(NSInteger)fireOne:(NSInteger)index
{
// switch (index) {
// case 0:
// NSLog(@"长官 我还没有准备好!");
// return index;
// break;
// case 1:
// NSLog(@"长官 再等等!");
// return index;
// break;
// case 2:
// NSLog(@"长官 您先上!");
// return index;
// break;
// default:
// return 3;
// break;
// }
NSLog(@"%@:%@",[selfclass],arr[index]);
return ++index;
}
- oc学习之旅:协议
- oc学习之旅:协议 银行转账
- oc学习之旅:简单协议
- OC学习之延展和协议
- OC学习总结之延展类目协议
- OC学习之协议(protocol)浅析
- OC学习Runtime之协议与分类
- oc学习笔记之协议与分类
- OC学习之正式协议和非正式协议
- OC学习:OC中的协议
- OC之【@protocol协议】
- OC语言之协议
- OC之Protocol (协议)
- OC学习篇之---协议的概念和用法
- OC学习篇之---协议的概念和用法
- 黑马程序员-----oc语言学习笔记之block和协议
- IOS学习之OC语言BLOCK和协议
- OC学习篇之---协议的概念和用法
- Cocos2d-x入门之常用类介绍
- Redis 命令参考
- 通过LeakDiag查看内存泄漏
- 更改aspx页面编码格式
- Uni2D 入门 -- Atlas
- oc学习之旅:协议
- arm-linux-gcc安装
- Windows 内存泄漏检测工具——LeakDiag
- 史上最全设计模式导学目录(完整版)
- LeakDiag的使用
- Global Fog全局雾特效
- VS添加映射错误,无法添加/删除,C**是只读的
- 2013年中国手游用户行为习惯调查报告
- map.coffee