美文网首页
Block 心得体会

Block 心得体会

作者: Hollylord | 来源:发表于2015-09-06 11:13 被阅读176次

    首先不介绍block的基本概念等,推荐对block的精华阐释:block一点也不神秘

    其次说说我的理解:

    1.  属性block是可以类比代理来传值的。 因为block里面含参数

    例如: 设VC2中有个block的属性,在VC1中初始化VC2,并拿到VC2的block属性,定义block,也是就VC1拿到block中的参数do sth。
    在VC2中调用block并传参数,并执行block即可。
    这样就是VC2把参数传给block,然后执行block,此时VC1拿到block中的参数,do sth。

    这种情况相当于:VC1是VC2的代理。block是协议。
    谁要让代理做事,谁就要有block作为属性。

    2. block作为方法中的参数。

    我的理解为:block就是代码块,一段特定的代码。当执行这个方法时,方法会在适当的时候调用作为参数的block 。
    注意:block里面的参数,是这个方法给的,相当于已知条件。方法传参数给这个block,你来决定这个block应该做哪些事。
    关键是:block作为参数,是由外部定义的,因此想干嘛干嘛。再次推荐精华block一点也不神秘

    3. block的缺点:如果A要B做某事,就必须B去实现A的block属性。那么现在最关键的问题是,当B要实现A的block时,B必须能够拿到A。

    这才是block最关键的地方!!!


    4.  用__WEAK 来解除循环引用,注意要关联对象啊。
    //获得头像后显示出来

    __weakmeLeft*weakMe ;

    headVC.passImage= ^(UIImage*image){

    weakMe.headImageView.image= image;

    };

    这段白写了,因为__weakmeLeft*weakMe ;没有指向任何对象啊,仅仅只是一个空指针啊。
    应该这样写:__weak meLeft*weakMe = me;
    __weak typeof(self) weakSelf =self;


    5. block用作函数的参数

    两种方法:

    A> 直接法:直接写在函数参数里面:- (void)abc:(void (^)(NSString *temp))para ;

    B>间接法:利用typedef 定义一个block类型 再把它加到函数参数里面去

    //定义了一个block类型 叫completionBlock

    typedef void(^completionBlock)(NSString *content,NSString *ispraised);

    相关文章

      网友评论

          本文标题:Block 心得体会

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