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> bvDelegate;

    @end

    委托:

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

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

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

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

}

[selfdismissViewControllerAnimated:YES completion:nil];

}

    代理:

    签订协议:

    @interface AViewController()<bvDelegate>

    设置代理:

    -(void)touchesBegan:(NSSet<UITouch*>*)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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,694评论 1 32
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,132评论 0 12
  • 夜深了,我们都在干什么?都喜欢在干什么? 吃宵夜?看电视?打游戏?还是在被窝里悄悄看书? 夜深了,月亮还会当空照吗...
    梵天梦阅读 169评论 0 0
  • 不知道是吃货多了,还是好吃的多了,现在餐饮生意火爆,各城市综合体生意最好的实体店往往也是餐饮,甚至都要靠餐饮来吸引...
    潘潘的先生阅读 2,318评论 0 3
  • 逐步深入,忽然觉得自己的英语,运用到真正交际中是多么的不足。如何写文书,如何写个人陈述,如何写推荐信,如何发邮件,...
    草木吟阅读 325评论 0 0

友情链接更多精彩内容