代理之iOS笔记摘录

作者: 平安喜乐698 | 来源:发表于2017-08-24 11:14 被阅读0次
目录


概念

A类让B类去负责具体实现,只要B类遵守指定协议并实现相关协议方法而不论它是什么类型。
1、可以使用参数值和返回值在二者之间进行数据传递。
2、在A类不开源的情况下,可以保证A类的安全。
最常见的协议就是
  UITableViewDelegate(提供交互)
  UITableViewDataSource(数据源)
  UIScrollViewDelegate

在main函数中就设置了AppDelegate为UIApplication的代理

代理和block的区别

相同点:
  都能传递值;
  都应避免循环引用;
  都应在使用前判断是否实现(如果不判断,会导致崩溃);
不同点:
  代理需要创建协议,用weak修饰dele属性,实现dele方法。block用copy修饰

使用步骤

首先创建一个协议
然后在B类中创建一个用weak修饰的delegate属性,
然后在A类中设置B的delegate为A,遵守该协议并实现协议中的方法。
然后在B类中判断delegate是否实现协议中的方法,实现则调用。

第一步:创建一个协议

@protocol 协议名 <NSObject>
@required;
-(void)run;
@optional;
-(void)eat;
@end

第二步:B类中创建delegate属性

@interface B
// dele使用weak:为了避免循环引用
@property (nonatomic,weak) id<协议名> delegate;
@end

第三步:A类遵守协议并实现相关协议方法

@interface A ()<协议名>
@property (nonatomic,strong) B *b;
@end
@implementation A
#pragma mark 协议名
-(void)run{
}

#pragma mark GET
-(B *)b{
    if(!_b){
        _b=[B new];
        _b.delegate=self;
    }
    return _b;
}
@end

第四步:B类中判断delegate是否实现协议中的方法,实现则调用

@implementation B
-(void)customMethod{
    if([self.delgate respondsToSelector:@selector(run)]){
        [self.delegate run];
    }
}
@end

相关文章

网友评论

    本文标题:代理之iOS笔记摘录

    本文链接:https://www.haomeiwen.com/subject/xtbsdxtx.html