文档章节

__weak typeof(self) weakSelf = self;

求是科技
 求是科技
发布于 2015/06/05 14:17
字数 189
阅读 231
收藏 0

block对于其变量都会形成strong reference(强引用),对self也会形成strong reference,而如果self本身对block也是 strong reference 的话,就会形成 strong reference 循环,造成内存泄露。为了防止这种情况发生,在block外部应该创建一个week(__block) reference(弱引用类型)。

所以在block内如果有self的话,一般都会在block外面加一句_block typeof(self)  bself = self;

例如:

__weak typeof(self) weakSelf    = self;
[weakSelf addLegendFooterWithRefreshingBlock:^{
    //do something
     [weakSelf.footer endRefreshing];
}


//参考网址:http://rocry.com/2012/12/18/objective-c-type-of/?utm_source=tuicool

// AFNetworking的写法
__weak __typeof(&*self)weakSelf = self;
// 我的写法
__weak __typeof(self) weakSelf = self;
// 或者这么写
__weak XxxViewController *weakSelf = self;
// 或者这么写
__weak id weakSelf = self;

© 著作权归作者所有

下一篇: java list用法
求是科技

求是科技

粉丝 98
博文 451
码字总数 232301
作品 0
成都
后端工程师
私信 提问
到底什么时候才需要在ObjC的Block中使用weakSelf/strongSelf

Objective C 的 Block 是一个很实用的语法,特别是与GCD结合使用,可以很方便地实现并发、异步任务。但是,如果使用不当,Block 也会引起一些循环引用问题(retain cycle)—— Block 会 reta...

北方人在上海
2016/04/05
27
0
在block中使用self怎么避免循环引用

内存问题始终是软件开发中的头等大事,iOS开发中也不例外,在面试中也是必问的问题。今天我们主要来讲讲Block中涉及的循环引用问题。当我们自己一开始写代码的时候,可能会大量在block中使用...

小王爷还小
2016/12/22
20
0
OC中解决循环引用的两种方式

1.weak weak typeof(self) weakSelf = self ARC中,weak本身是一种观察者模式,一旦发现对象被释放,会自动将地址置为nil,更加安全 效率:weak的效率略微差一些,以纳秒级别,差几纳秒而已 ...

Persistence__
2017/12/08
0
0
iOS block 循环引用问题

//加入~ weak typeof(self) weakSelf = self; self.requestData = ^(BOOL isCache){ if (weakSelf.tableView.mjheader.isRefreshing) { [weakSelf messageRequestToData:weakSelf.currentSt......

记忆淡忘
2016/01/04
38
0
IOS 后台不断网处理

后台不断网处理 地图服务 // // AppDelegate.m // networkdemo // // Created by siteview on 16/2/1. // Copyright © 2016年 数据结构. All rights reserved. // import "AppDelegate.h" ......

Snaiper
2016/02/25
38
0

没有更多内容

加载失败,请刷新页面

加载更多

Android7.1 recent过滤指定应用

systemui/recents/model/RecentsTaskLoadPlan.java 找到 preloadPlan方法 /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version......

安卓工程师王恒
10分钟前
0
0
让PIP源使用国内镜像,提升下载速度和安装成功率

对于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题。所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以...

编程老陆
19分钟前
0
0
为什么Map桶中个数超过8才转为红黑树

要弄明白这个问题,我们首先要明白为什么要转换,这个问题比较简单,因为Map中桶的元素初始化是链表保存的,其查找性能是O(n),而树结构能将查找性能提升到O(log(n))。当链表长度很小的时候,...

xiaomin0322
24分钟前
0
0
从Error: Cannot find module 'webpack-cli/bin/config-yargs'到package.json依赖管理dependencies中 ^ 和 ~ 的区别

故障现场: internal/modules/cjs/loader.js:582 throw err; ^ Error: Cannot find module 'webpack-cli/bin/config-yargs' at Function.Module._resolveFilename (internal/modules/cjs/loa......

wlc534
26分钟前
0
0
ThreadPoolExecutor线程池参数设置技巧

private static final ExecutorService ANDROID_CHANNEL_THREAD_POOL = new ThreadPoolExecutor(50/*corePoolSize:核心线程数*/, 100/*maxPoolSize:最大线程数*/, 2000/*kee......

铁骨铮铮
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部