oc学习之旅:简单协议

#import <Foundation/Foundation.h>

#import "Boss.h"

#import "Coder.h"

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

{


    @autoreleasepool {

        

        /*

         协议:本质就是一组接口

         协议代理作用在:传参 回调

         */

        

        /*

         1.声明协议 @protocol

         2.区分代理与被代理

         (如果参数由a对象传往b对象 那么A就是B的被代理 BA的代理)

         3.在被代理中

          声明id <xxx协议> delegate成员变量 同事实现@property   @synthesize

          在被代理的某个方法中调用代理的方法 

          固定写法

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

            [_delegate startCode];

         }

         4.代理方

           代理方遵守协议<XXX协议>

           代理实现接口

         5.使用代理时 必须设置代理 A.delegate = B

         */

        Boss *b = [[[Boss alloc] init] autorelease];

        Coder *c = [[[Coder alloc] init] autorelease];

        //c设置为b的代码

        b.delegate = c;

        

        [b work];

        Chief *chief = [[[Chief alloc] init] autorelease];

        Soldier *soldier=[[[Soldier alloc] init] autorelease];

        chief.delegate = soldier;

        [chief order];

        

    }

    return 0;

}


CoderProtocal.h

#import <Foundation/Foundation.h>

//1.@protocol声明一个协议<遵守NSObject协议>

@protocol CoderProtocal <NSObject>

//不带参不带返回值

-(void) startCode;

@end


boss.h

#import <Foundation/Foundation.h>

#import "CoderProtocal.h"

//2.区分代理预备代理

@interface Boss : NSObject

{

    //delegate必须遵守协议

    id<CoderProtocal> _delegate;

}

@property(nonatomic ,assign) id <CoderProtocal> delegate;

//工作

- (void)work;

@end


boss.m

@implementation Boss

@synthesize delegate =_delegate;


- (void)work

{

    //代理固定写法

    //设置了代理(代理不为空) && 代理实现了startCode方法

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

        [_delegate startCode];

    }

}

@end


Coder.h

#import "CoderProtocal.h"

//代理方遵守协议

@interface Coder : NSObject<CoderProtocal>


Coder.m

//代码规范:标记协议代码 让代码更清晰 

#pragma mark -CoderProtol

//实现协议

-(void)startCode

{

    NSLog(@"代码写到吐血...");

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值