iOS学习笔记61-AFNetworking造成的内存泄露处理

来源:互联网 发布:道路算量用什么软件 编辑:程序博客网 时间:2024/05/17 22:48

-(void)startRequestInfo{
    __weak typeof(self)weakself = self;
    weakself.manager=[AFHTTPSessionManager manager];
    weakself.manager.responseSerializer.acceptableContentTypes=[NSSet setWithObject:@"text/html"];
    [weakself.manager GET:weakself.path parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if ([weakself.delegate respondsToSelector:@selector(sendMessage:andPath:)]) {
            [weakself.delegate sendMessage:responseObject andPath:weakself.path];
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
    }];



block回调时想要修改外部属性的值,在ARC下如果你不弱化类指针,就会警告你循环引用.原因在于block出栈需要将使用的数据从栈内存拷贝到堆内存,当然对象的话就是加计数,你在ARC下strong去修饰属性,为了持有住这个属性引用计数器会加1,程序结束完进入自动释放池,strong加的1会自动被释放,然而你进block时,block从栈内存拷贝到堆内存给你加了1,block出栈后加的1并没有做处理,内存就泄露了.解决方式就是在使用block时去弱化你要在block里引用的self,即__weak typeof(self)weakself = self; 
1 0
原创粉丝点击