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

说起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);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容