day022 Delegate与Protocol

来源:互联网 发布:靠谱日本代购淘宝店 编辑:程序博客网 时间:2024/06/05 11:07

一,不使用delegate

//
//  main.m
//  代理2
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import <Foundation/Foundation.h>
#import "Person.h"
#import "Cat.h"


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *pxd = [[Person alloc] init];
        [pxd needOneHouse];
        
        Cat *jfm = [[Cat alloc] init];
        [jfm needOneHouse];
    }
    return 0;
}


//
//  Agent.h
//  代理2
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import <Foundation/Foundation.h>
#import "Person.h"
#import "Cat.h"


@interface Agent : NSObject


//用一个变量来记录让我租房的那个人
@property (nonatomic, strong) Person *customer;


//用一个变量记录猫这个对象
@property (nonatomic, strong) Cat *catCustomer;


//找房源
- (void)rentHouse:(NSString *)str;


@end


//
//  Agent.m
//  代理2
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import "Agent.h"


@implementation Agent


- (void)rentHouse:(NSString *)str{
    NSLog(@"开始找房源");
    NSLog(@"........");
    NSLog(@"找到一个相关房源");
    
    //告诉客户  调用客户里面的某个方法 传递参数过去
    if (self.customer) {
        [self.customer sendResult:@"贵阳花溪财大"];
    }
    
    if (self.catCustomer) {
        [self.catCustomer sendResults];
    }
}
@end


//
//  Person.h
//  代理2
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import <Foundation/Foundation.h>


@interface Person : NSObject


- (void)needOneHouse;


//定义一个方法 用来接收中介返回过来的结果
- (void)sendResult:(NSString *)des;


@end


//

//  Person.m
//  代理2
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import "Person.h"
#import "Agent.h"


@interface Person ()
@property (nonatomic, strong) Agent *xiaowang;
@end
@implementation Person


- (void)needOneHouse{
    //找到一个中介   实例化一个对象
    self.xiaowang = [[Agent alloc] init];
    
    //告诉你是我让你去租房的
    _xiaowang.customer = self;
    
    //让这个中介去做事  找房子
    [_xiaowang rentHouse:@"价格不是问题 就是要高大上"];
}


- (void)sendResult:(NSString *)des{
    NSLog(@"这个房子不错 ,哥要了");
}
@end


//
//  Cat.h
//  代理2
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import <Foundation/Foundation.h>


@interface Cat : NSObject


- (void)needOneHouse;
- (void)sendResults;


@end


//
//  Cat.m
//  代理2
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import "Cat.h"
#import "Agent.h"


@implementation Cat


- (void)needOneHouse{
    Agent *xiaowang = [[Agent alloc] init];
    xiaowang.catCustomer = self;
    [xiaowang rentHouse:@"舒适安逸 小巧玲珑"];
}


- (void)sendResults{
    NSLog(@"加菲猫的邻居?我喜欢");
}
@end



二,使用delegate,会简化程序


//
//  main.m
//  代理3
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import <Foundation/Foundation.h>
#import "Person.h"
#import "Cat.h"


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *pxd = [[Person alloc] init];
        [pxd needOneHouse];
        
        Cat *jfm = [[Cat alloc] init];
        [jfm needOneHouse];
    }
    return 0;
}


//
//  Agent.h
//  代理3
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import <Foundation/Foundation.h>


//定义一个协议 代理
@protocol RentHouseDelegate <NSObject>


@optional
- (void)useQQ:(NSString *)msg;
- (void)useEmail:(NSString *)msg;


@required
- (void)oneHalfMonthMoney;


@end


@interface Agent : NSObject


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


//租房源
- (void)rentHouse:(NSString *)des;


@end

//
//  Agent.m
//  代理3
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import "Agent.h"


@implementation Agent


- (void)rentHouse:(NSString *)des{
    NSLog(@"...........");
    NSLog(@"找到了你要的%@", des);
    
    //判断delegate是否存在
    //判断delegate是否服从了我的协议,是否真的实现我的约定
    if ([self.delegate respondsToSelector:@selector(useQQ:)]){
        [_delegate useQQ:@"房子非常霸道"];
    }
    
    if ([self.delegate respondsToSelector:@selector(useEmail:)]) {
        [_delegate useEmail:@"房子非常霸道"];
    }
    
    if ([self.delegate respondsToSelector:@selector(oneHalfMonthMoney)]) {
        [_delegate oneHalfMonthMoney];
    }
}
@end


//
//  Person.h
//  代理3
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import <Foundation/Foundation.h>
#import "Agent.h"


@interface Person : NSObject<RentHouseDelegate>


- (void)needOneHouse;


@end


//
//  Person.m
//  代理3
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import "Person.h"


@implementation Person


- (void)needOneHouse{
    Agent *xiaowang = [[Agent alloc] init];
    xiaowang.delegate = self;
    [xiaowang rentHouse:@"干净整洁"];
}


//required方法必须实现
- (void)oneHalfMonthMoney{
    NSLog(@"给你500");
}


- (void)useEmail:(NSString *)msg{
    NSLog(@"email 接收到了");
}
@end

//
//  Cat.h
//  代理3
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import <Foundation/Foundation.h>
#import "Agent.h"


@interface Cat : NSObject<RentHouseDelegate>


- (void)needOneHouse;


@end

//
//  Cat.m
//  代理3
//
//  Created by PXD on 15-4-16.
//  Copyright (c) 2015年 PXD. All rights reserved.
//


#import "Cat.h"


@implementation Cat


- (void)needOneHouse{
    Agent *xiaowang = [[Agent alloc] init];
    xiaowang.delegate = self;
    [xiaowang rentHouse:@"光线好 视野棒"];
}


- (void)oneHalfMonthMoney{
    NSLog(@"400");
}


- (void)useQQ:(NSString *)msg{
    NSLog(@"qq");
}
@end


0 0
原创粉丝点击