iOS-代理详解及使用

一、定义:

    代理模式是一种传递消息的模式,整个模式包括:协议、委托、代理三个模块。

    协议:定义的规则,规则就是代理方需要实现的方法

    委托:委托人,事件的委托方

    代理:根据协议做事情的人,实现委托人所托付的事情

二、页面传值写法

    目的:A控制器跳转到B控制器,再从B控制跳转回来,并且带回一个值。

    (1 )在B控制器声明协议及属性,在跳转回A控制器的方法里写代理方法传值

   (2)在A控制器遵守协议,实现协议方法接收传过来的值

    协议:声明

    @protocol  BVDelegate

    @required//必须实现

    -(void)number:(NSInteger)number;

    @optional//不必须实现

    -(void)stringNumber:(NSString *)str;

    @end

    协议:声明一个属性

    @interface BViewController : UIViewController

    @property (nontomic, weak) id bvDelegate;

    @end

    委托:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{

// 判断代理方法是否存在

if([self.bvDelegaterespondsToSelector:@selector(stringNumber:)]){

[self.bvDelegatestringNumber:@"回传"];

}

[selfdismissViewControllerAnimated:YES completion:nil];

}

    代理:

    签订协议:

    @interface AViewController()

    设置代理:

    -(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{

    BViewController *BVC = [[BViewController  alloc]init];

    BVC.delegate = self;

}

    实现代理方法:

    -(void)stringNumber:(NSString *)str{

    NSLog(“%@”,str);

}

三、注意点

    1.strong:该对象强引用delegate,会导致循环引用。

    2.assing:采用assign修饰代理时,是指针赋值,从而导致成为了一个野指针;

    3.weak:当对象释放时,weak会自动将指针指向nil

你可能感兴趣的:(iOS-代理详解及使用)