OC基础 代理模式

Posted zhangqing979797

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC基础 代理模式相关的知识,希望对你有一定的参考价值。

什么是代理?

1.代理(委托):自己不亲身做,让别人做

2.定义了协议的类可以看作将协议定义的方法代理给了实现这些方法的类

 

技术图片

 

 

boss h

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


@interface boss : NSObject
// 使用我这个对象必须遵守我的协议,如果没有会出现不匹配的情况
@property id<Assisant> delegate;//代理 nil oc给nil任何消息都没有问题
-(void)travel;




@end

boss m

#import "boss.h"

// 未命名分类
@interface boss()
-(void)takePlane;
-(void)bookTicket;
-(void)bookHotel;
-(void)liveHotel;
@end
@implementation boss
-(void)travel
// 私有方法的前项引用

{ [self bookTicket];
    [self bookHotel];
    [self takePlane];
    [self liveHotel];

}
//代理
-(void)bookTicket
{
    
    [self.delegate bookTicket];
    
}

-(void)bookHotel
{
    
    [self.delegate bookHotel];
    
}

-(void)takePlane
{
    
    NSLog(@"老板亲自坐飞机");
    
}

-(void)liveHotel
{
    
    NSLog(@"老板亲自住酒店");
    
}

@end

 

 

Assisant h

#import <Foundation/Foundation.h>


#import "Assisant.h"
@interface Assistant : NSObject<Assisant>


@end

Assisant m

#import "Assistant.h"

@implementation Assistant
-(void)bookTicket
{
    NSLog(@"给订票公司打电话");
    NSLog(@"订机票");
    
    
}

-(void)bookHotel
{
    NSLog(@"助理 去携程");
    NSLog(@"助理 去酒店");
    
    
}
@end

 

协议 用作限制代理

@protocol Assisant
-(void)bookTicket;
-(void)bookHotel;
@end

 

main

#import <Foundation/Foundation.h>
#import "boss.h"
#import "Assistant.h"
#import "person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        boss* b=[[boss alloc]init];
        person* p=[[person alloc]initWithName:@"zhangsan" andAge:25 andGender:"m"];
        Assistant* ass=[[Assistant alloc]init];
        
        b.delegate=ass;
        
        
//        b.delegate=ass;
        [b travel];
        
        

        
        
    }
    return 0;
}

 

以上是关于OC基础 代理模式的主要内容,如果未能解决你的问题,请参考以下文章

介绍 - OC中的代理模式

OC第九节——协议与代理

oc66--代理模式应用2

IOS开发-OC学习-常用功能代码片段整理

Objective-C中的委托(代理)模式

OC系列高级-代理