您的位置:首页 > 移动开发 > IOS开发

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

2016-02-25 19:23 573 查看
-(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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: