黑马程序员---IOS protocol

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


一.概述

  协议(protocol):规定的一组方法方法的声明,当你必需完成一个或几个特定的任务时候就该用到协议了。

  委托(delegate):就是把这几个特定的任务交付给这个对象完成。

  有一个老板(BOSS)需要聘请清洁员(Cleaner),这个清洁员需要完成扫地(cleanFloor),倒垃圾  (takeOutTrash)等任务(Task)。

  清洁员这个就属于委托对象了,而清洁员需要完成的这些个扫地,倒垃圾等任务就属于协议。

二.协议和委托的声明

 1. 使用可视化界面创建一个协议:

 2. 编写协议的内容:

 3. 实现委托

     3.1 委托可以实现多个协议

    

     3.2 委托实现协议要做的事情

     


 4. 管理者使用委托

 5. main函数

源代码如下:

//
//  Task.h
//  protocol
//
//  Created by AndyJerry on 14-12-19.
//  Copyright (c) 2014年 AndyJerry. All rights reserved.
//

#import <Foundation/Foundation.h>
//协议的声明
@protocol Task <NSObject>

//必须要实现的方法用@required声明
@required
-(void) cleanFloor;
-(void) takeOutTrash;

//可以不实现的方法用optional声明
@optional
-(void) cook;
@end


#import <Foundation/Foundation.h>
@protocol Task;
//@protocol Task2;
@interface Cleaner : NSObject<Task>

//实现多个协议
//@interface Cleaner : NSObject<Task, Task2>

@end

//也可以在一个类中定义协议,不过建议写在一个单独的头文件中
@protocol Task2 <NSObject>

-(void)rest;

@end

//委托
#import "Cleaner.h"
#import "Task.h"
@implementation Cleaner
//实现必须完成的任务 实现协议
-(void)cleanFloor {
    NSLog(@"Boss, I'm cleaning");
}

-(void)takeOutTrash {
    NSLog(@"Boss, I'm taking out trash");
}

@end


#import <Foundation/Foundation.h>
@class Cleaner;
@protocol Task;


@interface Boss : NSObject

//@property中声明的属性也可用做一个遵守协议的限制
@property (retain, nonatomic) Cleaner<Task> *cleaner;

@end

#import "Boss.h"
#import "Cleaner.h"
#import "Task.h"
@implementation Boss

@end


#import <Foundation/Foundation.h>
#import "Task.h"
#import "Cleaner.h"
#import "Boss.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Cleaner *cleaner = [[[Cleaner alloc] init] autorelease];
        
        Boss *boss = [[Boss alloc] init];
        
        boss.cleaner = cleaner;
        
        [cleaner release];
        
        [boss.cleaner cleanFloor];
        
        [boss.cleaner takeOutTrash];
        
        [boss release];
    }
    return 0;
}



 


 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值