iOS-浅谈Block直接使用self(AFN、Masonry)

作者: 900d4934decf | 来源:发表于2017-08-23 10:03 被阅读282次

    说起block,真是一个让人既爱又恨的东西。

    爱:太方便了。

    恨:很容易造成内存泄漏,每次都要写weakSelf太麻烦了。

    不过相信大家都有发现,在AFNetworking和Masonry的block里面都是可以直接用self的。我们看看Masonry的源码

    - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
        self.translatesAutoresizingMaskIntoConstraints = NO;
        MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
        block(constraintMaker);
        return [constraintMaker install];
    }
    

    里面的block是一个局部的变量,在方法调用后就会释放,不会持有block方法所在的对象,所以没有相互持有而无法释放。
    仔细可以发现AFNetworking里,也是同样的套路。

    所以我们可以仿照来写block方法,只需两步

    1、声明方法
    - (void)blockAction:(void (^)(NSInteger value))block;

    2、方法实现

    - (void)blockAction:(void (^)(NSInteger))block
    {
        block(123);
    }
    

    相关文章

      网友评论

        本文标题:iOS-浅谈Block直接使用self(AFN、Masonry)

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