oc学习之旅:协议

构造一个士兵代理教官的开火的方法,并返回一个对话,教官有相应的对话,然后让士兵去执行。

main

#import <Foundation/Foundation.h>

#import "Master.h"

#import "Solider.h"

int main(int argc, const char * argv[])

{


    @autoreleasepool {

        

        Master *master = [[[Master alloc] init] autorelease];

        Solider *solider =[[[Solider alloc] init] autorelease];

        NSLog(@"%p",solider);

        master.delegate =solider;//必须若引用,不然释放时候会出现问题

        [master order];

        

        //保证main函数不退出

        while (1) {

            [[NSRunLoop currentRunLoop] 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 = [super init];

    if (self) {

        arr =[[NSArray alloc]initWithObjects:@"111",@"222",@"333", nil];

        count = 0;

        [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(order) userInfo:nil repeats:YES];

    }

    return self;

}

-(void)order

{

    //delegate已经指向了士兵了

    NSLog(@"del %@",[_delegate class]);

    if (_delegate &&[_delegate respondsToSelector:@selector(fire)]) {

        //用一个对象的指针引用了另一个对象的空间

        [_delegate fire];

       

//        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(@"%@:%@",[self class],arr[count]);

            count = [_delegate fireOne:count];

        }

    }

}


代理Solider.h

#import <Foundation/Foundation.h>

#import "FireProtocol.h"

@interface Solider : NSObject<FireProtocol>


@end


solider.m

{

    NSArray *arr;

}

- (id)init

{

    self = [super init];

    if (self) {

        arr = [[NSArray alloc] 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(@"%@:%@",[self class],arr[index]);

    return ++index;

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值