自定义Delegate 传值



当我们学习控件的时候!我们发现很多控件本身都有自己的委托!当我们把一些方法封转起来的时候  通过委托能更好的处理数据或者事件!我们知道苹果推崇的MVC开发模式,委托常常用来处理模型和图形之间数据的传递。例如我们通过http 请求服务器时!我们通常会把http处理数据封装在一个模型里!我们可以通过委托来传递请求完的数据!这样增强的代码的耦合度和复用率!

自定义委托本身遵循一个自己规定的协议!让定义好的方法来遵循我们的协议!



下面用过一个 简单的传值来看看他们的机制!

 通常,一个delegate的使用过程,需要经过五步:

1.     创建一个 delegate;

2.    委托者声明一个delegate;

3.    委托者调用delegate内的方法(method);

4.    被委托者设置delegate,以便被委托者调用;

5.    被委托者实现Delegate 所定义的方法。


掉用 delegate 后 最后一定要在-(void)dealloc  把当前的的委托置空 nil;不然的话当我们请求数据的时候由于网络的原因没有请求完 而退出当前界面导致程序崩溃!

声明的时候最好用assign,保证delegate整个生命进程都可以调用!避免引用计数为0 导致程序cras!


@property (assign,nonatomicid<httpDelegate> delegate; //声明一个delegate

我们在A类里调用B类的delegate 来获取数据


/B类//

#import

@protocol httpDelegate <NSObject>//定义一个协议来实现委托的方法

//@optional 表明,这个方法是不要求一定实现,是可选的。

@optional

-(void)host:(NSString *)hostString port:(NSString *)portString;//delegate 定义的方法

@end



@interface HttpNetWork : NSObject

{

    NSString *hoststring;

    NSString *portstring;

    id<httpDelegate> delegate;


}


@property (assign,nonatomic)id<httpDelegate> delegate;//声明一个delegate

-(void)gethostingAndportsting;

@end




#import "HttpNetWork.h"


@implementation HttpNetWork

@synthesize delegate = _delegate;

-(id)init

{

    if (self = [superinit])

    {

        

      hoststring =@"192.168.11.00";

      portstring =@"0000";

   

  

    }

    return self;

}


-(void)gethostingAndportsting

{

    

    [ [selfdelegate ] host:hoststringport:portstring];

    

}



/A类//


- (void)viewDidLoad

{

    [superviewDidLoad];

    

    http = [[HttpNetWorkalloc]init];

    

    http.delegate =self;

    

    [http gethostingAndportsting];


}


// B类里delegate实现的方法 

-(void)host:(NSString *)hostString port:(NSString *)portString

{

   

    NSString *host = [hostString copy];

    NSString *port = [portString copy];

    

    _hostLabel.text = host;

    _portLabel.text = port;

  

}

-(void)dealloc

{

      http.delegate =nil;

}



demo 下载地址  http://download.csdn.net/detail/lengshengren/6505519


你可能感兴趣的:(delegate,notification,KVO,块)