想重新加载一个 tableview 的数据源时,直接将其设为 nil,可以么?

2014-10-18 22:33:26 +08:00
 ashamp
-(void)reloadData
{
self.videoBookMarkDataList=nil;
[self.tableView reloadData];
}

//数据源
-(NSMutableArray *)videoBookMarkDataList
{
if (_videoBookMarkDataList==nil) {
_videoBookMarkDataList=[[DataProviderFromDB getVideoBookmark]mutableCopy];
}
return _videoBookMarkDataList;
}

这样安全吗?会内存泄漏吗?
2613 次点击
所在节点    iDev
6 条回复
jox
2014-10-18 22:47:53 +08:00
光看这些代码似乎看不出来会否造成泄露,得看你关注的那个对象的引用数以及与其他在应用运行过程中会被丢弃的对象间的关系是怎样的

看样子这段代码是一个view controller实现里的两个函数是吗?如果这个VC里的videoBookMarkDataList属性是这个对象唯一的引用的话,这样是不会造成泄露的。你把那个属性的值设为nil的时候,如果这个对象再没有其他的引用的话Obj C的运行时里的GC会自动释放这个对象的
satanwoo
2014-10-18 23:31:42 +08:00
@jox Objc 运行时现在还有gc?
jox
2014-10-18 23:55:37 +08:00
@satanwoo 额,那个不叫gc吗?是不是应该叫ARC——Auto Reference Counting准确一些?好像记得这个和GC是有区别的,我一直理解为系统会计算各个对象的引用数,如果引用数为0之后就释放掉对象,我只知道这么多,如果叫错了就抱歉啦~
ashamp
2014-10-19 00:07:05 +08:00
@jox cell中显示的内容依赖于数据源,算引用吗?
jox
2014-10-19 00:29:55 +08:00
@ashamp 晕,当然不算。
satanwoo
2014-10-19 11:16:03 +08:00
@jox arc不是运行时啊~是编译期的行为。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/139903

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX