SDWebImage这样用会循环引用警告吗,为什么

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
【海归人才网】一个iOS程序员的BAT面试全记录(内含百度+网易+阿里面试真题).docx 7页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
【海归人才网】一个iOS程序员的BAT面试全记录(内含百度 网易 阿里面试真题)
你可能关注的文档:
··········
··········
【海归人才网】一个iOS程序员的BAT面试全记录(内含百度+网易+阿里面试真题)作为 iOS 开发者,虽然 Swift 已经发布了快两年,但是大公司转向 Swift 的动作还不明显,所以 Objective-C 几乎是必备项,Swift 都不一定能算是加分项。iOS 方面的知识也必不可少,虽然招聘信息上写着如果基础扎实,零 iOS 基础也可以,但是现实往往是比较残酷的。我的面试经历分享一下我的面试经历,题目如下,?破折线后面是简单的解决思路。百度一面:约 1.5 小时首先是四个算法题:不用临时变量怎么实现 swap(a, b)——用加法或者异或都可以二维有序数组查找数字——剑指 offer 第 3题亿级日志中,查找登陆次数最多的十个用户——(不确定对不对,我的思路是)先用哈希表保存登陆次数和ID,然后用红黑树保存最大的十个数。剑指 offer 第 30题简述排序算法——快排,?partion?函数的原理,堆排(不稳定),归并排序,基数排序。然后有一个智力题?,没完整的答出来,好像影响不是很大。最后是 iOS 相关,面试官问的很开放,都是谈谈自己的理解:说说你对 OC 中?load?方法和?initialize?方法的异同。——主要说一下执行时间,各自用途,没实现子类的方法会不会调用父类的?说说你对 block 的理解。—— 三种 block,栈上的自动复制到堆上,block 的属性修饰符是 copy,循环引用的原理和解决方案。说说你对 runtime 的理解。——主要是方法调用时如何查找缓存,如何找到方法,找不到方法时怎么转发,对象的内存布局。说说你对 MVC 和 MVVM 的理解。—— MVC 的 C 太臃肿,可以和 V 合并,变成 MVVM 中的 V,而 VM 用来将 M 转化成 V 能用的数据。说说 UITableView 的调优。——一方面是通过 instruments 检查影响性能的地方,另一方面是估算高度并在 runloop 空闲时缓存。谈谈你对 ARC 的理解。ARC 是编译器完成的,依靠引用计数,谈谈几个属性修饰符的内存管理策略,什么情况下会内存泄露。一面的问题非常基础,主要是算法和 Objective-C,因为准备比较充分,基本上答出来 80% 吧。大约一周后突然二面。二面:约 0.5 小时二面比较突然,先是简单的自我介绍,然后问了三个问题:野指针是什么,iOS 开发中什么情况下会有野指针?——野指针是不为 nil,但是指向已经被释放的内存的指针,不知道什么时候会有,如果有知道的读者还望提醒。介绍 block。—— (接第一问) 我让面试官提示我一下什么时候会有野指针,他说用 block 时,我表示还是不知道,只知道 block 会有循环引用。于是就扯回了一面的问题。说说你是怎么优化 UITableView 的。——还是一面的问题。三面:北京 onsite,约 2.5 小时首先是给一个小时,手写算法:给一个字符串,如何判断它是否是合法的 IP 地址,比如 “192.168.1.1” 就是合法的。说说大数相加的思路,动手写代码实现。没能写完,主要是大数相加的时候需要考虑负数,耽搁了一点时间。然后让我简述 TCP 建立和关闭连接时,握手的过程。还问了前者为什么是三次,后者需要四次?接下来是设计了一个实际场景,为了简化问题,我们考虑这个问题:假设有 10W 条电话号码,如何通过输入电话号码的某一段内容,快速搜索出来。比如输入?234?,以下两个号码都会显示在搜索结果中:其实最简单的解决方案是遍历所有字符串,然后用 KMP 算法。但是这样的问题是需要遍历 10W 个元素,效率比较低。我想到的是办法是使用索引。建立 100 个索引(00 到 99),比如输入?234?时只需要在索引?23?对应的区域查找即可,可以加快 100 倍速度。但是缺点是插入数据时,需要更新多个索引,数据量会是原来的 10 倍。目前还没有想到好的解决方案。有大神提醒说用字典树,有空研究一番。最后问了 OC 的数组中,添加?nil?对象会有什么问题。当时没答上来,现在想想很不应该,因为数组是以?nil?结尾的,如果添加了?nil?,后续就不能添加对象了。网易笔试:主要是计算机方面的大杂烩,涉及操作系统,网络,移动开发,算法等。难度不大,目测是为了淘汰浑水摸鱼的人,就不列出题目了,算法有三题,直接在线写(木有 IDE 表示很忧伤):很长一道题,读了很久才读懂,目测是 DFS,但是最后没时间了,写了个思路。把 “www.zhidao.baidu.com” 这样的字符串改成 “com/baidu/zhidao/www”。——老题目了,剑指 offer 的,两次逆序排列即可。求数组中和为某个值的所有子数组,比
正在加载中,请稍后...他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)ARC下使用MJRefresh时需要注意tableView循环引用
直接上代码,这是一个懒加载,相信大多数朋友已经发现在使用MJRefresh时出现了内存管理的错误
#pragma&mark======创建主界面
-&(UITableView&&*)tableView
&&&&if&(!_tableView)&{
&&&&&&&&_tableView&=&[[UITableView&alloc]initWithFrame:CGRectMake(0,&108,&WIDTH,&HEIGHT-108-44)&style:UITableViewStylePlain];
&&&&&&&&_tableView.backgroundColor&=&[UIColor&colorWithRed:220/255.0&green:222/255.0&blue:222/255.0&alpha:1];
&&&&&&&&_tableView.separatorStyle&=&UITableViewCellSeparatorStyleN
&&&&&&&&_tableView.dataSource&=&
&&&&&&&&_tableView.delegate&=&
&&&&&&&&[_tableView&registerNib:[UINib&nibWithNibName:@"OldGoodsCell"&bundle:nil]&forCellReuseIdentifier:@"cell"];
&&&&&&&&_tableView.mj_header&=&[MJRefreshNormalHeader&headerWithRefreshingTarget:self&refreshingAction:@selector(refersh)];
&&&&&&&&_tableView.mj_footer&=&[MJRefreshAutoNormalFooter&footerWithRefreshingBlock:^{
#pragma&mark======加载更多数据
&&&&&&&&&&&&NSLog(@"加载更多数据");
&&&&&&&&&&&&
&&&&&&&&&&&&[_tableView.mj_footer&endRefreshing];
&&&&&&&&}];
&&&&return&_tableV
上述代码中,造成循环引用的地方依然是最基本的block,即
_tableView.mj_footer&=&[MJRefreshAutoNormalFooter&footerWithRefreshingBlock:^{
#pragma&mark======加载更多数据
&&&&&&&&&&&&NSLog(@"加载更多数据");
&&&&&&&&&&&&
&&&&&&&&&&&&[_tableView.mj_footer&endRefreshing];
&&&&&&&&}];
_tableView的mj_footer内部是这样的,self就是_tableV
-&(void)setMj_footer:(MJRefreshFooter&*)mj_footer
&&&&if&(mj_footer&!=&self.mj_footer)&{
&&&&&&&&//&删除旧的,添加新的
&&&&&&&&[self.mj_footer&removeFromSuperview];
&&&&&&&&[self&addSubview:mj_footer];
&&&&&&&&//&存储新的
&&&&&&&&[self&willChangeValueForKey:@"mj_footer"];&//&KVO
&&&&&&&&objc_setAssociatedObject(self,&&MJRefreshFooterKey,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mj_footer,&OBJC_ASSOCIATION_ASSIGN);
&&&&&&&&[self&didChangeValueForKey:@"mj_footer"];&//&KVO
但是,我们在block里是这样写的
[MJRefreshAutoNormalFooter&footerWithRefreshingBlock:^{
&&&&&&&&&&&&[_tableView.mj_footer&endRefreshing];
&&&&&&&&}]
很明显,造成了_tableView 的 循环引用,紧接着由于我们的_tableView 是 strong 类型的,它的循环引用带来的结果就是所属的viewController对象无法释放,继而造成dealloc无法执行。我们要打破这种情况,只要打破_tableView的循环引用就成功了。
所以我们要把viewController的self变成弱类型的weakSelf &,(不会变的请看这个__weak __typeof(&*self)weakSelf =会的请忽略) 即整行代码变成&[weakSelf.tableView.mj_footerendRefreshing];
这样一来,即使在给mj_footer的block里出现了&
[weakSelf.tableView.mj_footerendRefreshing]; weakSelf都是弱类型的了,里面的tableView也会随之释放,tableView的循环引用也就解决,循环引用的解决,dealloc方法也就恢复正常
更多相关文章
Ubuntu 13.04/CentOS 6.4 下C++开发时的相关设置一.基本设置首先,为了可以使我们的c++ 可以找到 iostream类,std标准库,我们需要在C/C++ General-&Paths and Symbols 中添加include dictionarys.当然,从c/c ...
在Linux下编译PHP时遇到的安装libmcrypt库的问题./configure –prefix=/usr/local/php-5.2.3 –enable-module=so –with-mysql=/usr/local/mysql-5.1.20 –with-apxs2=/usr/local/a ...
解决Window环境下启动Hadoop时出现的 java.lang.NoClassDefFoundError: org/apache/hadoop/util/PlatformName 异常.在Window下启动Hadoop-0.21.0版本时,会出现下面这样的错误提示: 1 java.lang.No ...
Ubuntu 11.04 下安装Compiz时标题栏不见的终极解决方法:1.首先先删掉配置文件alt+ctrl F1 切换到字符界面
rm -rf .gconf/app/compiz*2.删掉所有的依赖库以及软件:sudo apt-get autoremove --purge compiz com ...
学习在CentOS 5.3下架设LAMP时,复制了一套PHP的源码到/var/www/html下,发现index.php无权限访问,而手工新增一个简单的php文件可以正常访问,百思不得其解,可以确定的是文件目录的linux权限设定没问题,httpd配置也无问题.最后在google上搜索,发现原来是S ...
如题,ARC下已经不能使用NSAutoreleasePool对象,release/retain等方法,但是查了SDWebImage源码,看到 @autoreleasepool {}在ARC下还能用,请问,在ARC下 @autoreleasepool {}的作用是什么,如果跟NSAutorelease ...
在iOS MRC下,把NSInteger转化为id,可以直接强转,(id)UIDeviceOrientationLandscapeLeft,然后就可以performselector withobject, 现在我在ARC下同样的代码就会报disallowed的错误,那要怎么转化呢?前提我不想用mrc ...
在 dealloc 里 ARC下 self.instanceVariable = nil 和 _instanceVariable = nil 在 dealloc 里的区别 http://stackoverflow.com/questions/7906804/do-i-set-properties-t ...
我们直接用Arrays.toList方法将java数组转换为List时,会产生意外的问题,现在我们来谈谈把Java数组转换为List时的注意事项.现在将一个Java数组转换为List.可以使用Arrays.toLis ...
rsync是一款同步软件本人只要windows系统中使用过,它没能实现实时自动同步了,我们一般是结合windows计划任务来进行定时同步数据,但如果你在linux中利用lsyncd+rsync就能实现自动的实时文件同 ...
本文章给大家转一篇关于Centos apache2.2.4 MySql5.6.X PHP5.5.3手记自己备查文章,希望大家可查看查看.看软件安装帮助比什么都重要!!!*首先卸载干净以前的 apache mysql
因工作需要,接触到了一台OpenSUSE系统的Linu服务器,开始以为和CentOS一样只 ...
Topologic 6 包含更多的 bug 修复和代码清理:一个新的机遇 GLUT 的前端 ...
Monitorix 3.4.0 发布了,该版本包含不少新特性,主要改进有:全新图形来支持监 ...
PHPLOT 是一个用来创建图表的PHP图形类,需要 PHP5 的支持.PHPLot使用P ...
#GAEPhotos# V1.03 更新:1. 支持添加网络图片. 2. 修复了一些bug ...
Ubuntu开发团队表示Ubuntu 8.04.1操作系统大幅度提高了安全性和稳定性,推荐 ...
Fedora下OpenGl开发环境配置开发OpenGL工程需要3个库文件和对应的头文件:l ...更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
按住视频可进行拖动
&正在加载...
{{ each data as item index}}
{{if item.isLast}}
&正在加载...
抱歉,本页暂无内容!
{{#payMarkUrl}}
{{/payMarkUrl}}
{{^payMarkUrl}}
{{/payMarkUrl}}
&正在加载...
{{ each data as item index}}
{{item.playcount}}
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看
当前播放时间:
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接//71.am/udn
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
正在检测客户端...
您尚未安装客户端,正在为您下载...安装完成后点击按钮即可下载
30秒后自动关闭
03-sdwebimage体验
请选择打赏金额:
播放量12.7万
播放量数据:快去看看谁在和你一起看视频吧~
更多数据:
{{each data}}
抱歉,没有“{{feature}}”的其他视频了.
&正在加载...
&正在加载...
&正在加载...
&正在加载...
&正在加载...
&正在加载...
{{ each data as item index}}
Copyright (C) 2018
All Rights Reserved
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
正在为您下载爱奇艺客户端安装后即可快速下载海量视频
正在为您下载爱奇艺客户端安装后即可免费观看1080P视频
&li data-elem="tabtitle" data-seq="{{seq}}"&
&a href="javascript:void(0);"&
&span>{{start}}-{{end}}&/span&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"&
&a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《》剧集:
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
在UITableView中利用SDWebImage来缓存图片,但是第一次运行时图片只出来一部分(随机的出现1张或者2张),点击每一行或者把表格滚动出屏幕再滚动回来,图片就出现了。
不知道是什么原因?求解答,谢谢。主要代码如下:
-(void)viewDidLoad{
[super viewDidLoad];
//加载数据
[self setUpStatusData];
-(void)setUpStatusData{
AFHTTPRequestOperationManager *mgr=[AFHTTPRequestOperationManager manager];
NSMutableDictionary *params=[NSMutableDictionary dictionary];
NSString *filePath=[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"account.data"];
WPAccount *account=[NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
params[@"access_token"]=account.access_
[mgr GET:@"https://api.weibo.com/2/statuses/home_timeline.json" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSArray *dictArray=responseObject[@"statuses"];
self.statuses=[WPStatus objectArrayWithKeyValuesArray:dictArray];
//刷新表格
[self.tableView reloadData];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *ID=@"cell";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
WPStatus *status=self.statuses[indexPath.row];
cell.textLabel.text=status.
WPUser *user=status.
cell.detailTextLabel.text=user.
//加载图片,用框架,有缓存
[cell.imageView sd_setImageWithURL:[NSURL URLWithString:user.profile_image_url] placeholderImage:[UIImage imageWithName:@"icon"]];
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我没用过AFN,我猜测问题可能出现在你reloadData的时候没有在主线程进行,试试把reloadData外面包个:
dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf reloadData];
你这个代码还有个问题,就是block中访问self会造成内存循环引用,正确的做法是:
__weak UITableViewController *weakSelf =
然后在block中,使用weakSelf
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我也遇到了这样的问题..我是自定也cell..下边这个方法没有解决..楼主还有发现更好的方法吗? dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf reloadData]; });
该答案已被忽略,原因:
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 excel 循环引用 查找 的文章

 

随机推荐