代理之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