热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如果有延迟并且在集合视图中执行批量更新,UIView.animate中的自身应该是弱吗?

如何解决《如果有延迟并且在集合视图中执行批量更新,UIView.animate中的自身应该是弱吗?》经验,为你挑选了1个好方法。

一般来说,我知道在使用UIView.animate()时我们不需要自我弱,因为块没有强烈保持但是由于延迟,是否存在在下面的代码中使用弱的参数?为什么会有人说可能会有?

UIView.animate(withDuration: 0.1, animations: {
  self.performAction()
}

在下面的例子中我们为什么需要使用弱自/不需要使用弱自我...?

collectionView.performBatchUpdates({
    self.collectionView.reloadData()
    ...
})

Sandeep Bhan.. 5

背景 :

块/闭包只不过是堆内存中的引用计数对象.当您创建一个块并保持对块/闭包的强引用时,您声明该块的引用计数增加1.

显然这意味着即使在从内存执行块之后块也不会被释放,直到强烈持有对块的引用的所有类都释放它们的强大保持.

现在记住这一点,如果你传递一个强大的自我来阻止,因为块内使用的变量保持活着直到块完成它的执行(上下文捕获,这是函数和块之间的主要区别)自我将不会被释放,直到块本身被释放.

现在那是一个死锁:)你的自己拥有对块对象的强引用,而块对象实习生拥有对自我的强引用.现在两个人都会等待对方释放并最终永远不会释放对方.

回答你的问题:

正如您所指出的,如果您没有强烈持有UIView.animate块的引用,则没有令人信服的理由让您传递弱自我,因此collectionView批量更新的情况也是如此.

在你的情况下

collectionView.performBatchUpdates({
    self.collection.reloadData()
    ...
})

我相信collection是collectionView,如果它是一个IBOutlet,你必须观察它被声明为弱对象.所以你的代码必须看起来更像

collectionView.performBatchUpdates({
    self.collection?.reloadData()
    ...
})

希望能帮助到你



1> Sandeep Bhan..:

背景 :

块/闭包只不过是堆内存中的引用计数对象.当您创建一个块并保持对块/闭包的强引用时,您声明该块的引用计数增加1.

显然这意味着即使在从内存执行块之后块也不会被释放,直到强烈持有对块的引用的所有类都释放它们的强大保持.

现在记住这一点,如果你传递一个强大的自我来阻止,因为块内使用的变量保持活着直到块完成它的执行(上下文捕获,这是函数和块之间的主要区别)自我将不会被释放,直到块本身被释放.

现在那是一个死锁:)你的自己拥有对块对象的强引用,而块对象实习生拥有对自我的强引用.现在两个人都会等待对方释放并最终永远不会释放对方.

回答你的问题:

正如您所指出的,如果您没有强烈持有UIView.animate块的引用,则没有令人信服的理由让您传递弱自我,因此collectionView批量更新的情况也是如此.

在你的情况下

collectionView.performBatchUpdates({
    self.collection.reloadData()
    ...
})

我相信collection是collectionView,如果它是一个IBOutlet,你必须观察它被声明为弱对象.所以你的代码必须看起来更像

collectionView.performBatchUpdates({
    self.collection?.reloadData()
    ...
})

希望能帮助到你


推荐阅读
  • 我正在使用NavigatonView和NavigationLink,我的观点是这样的:ScrollView{VStack ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 设计模式实现对象的复用——享元模式的概述和角色解析
    本文介绍了设计模式中的享元模式,该模式通过共享技术实现了大量细粒度对象的复用,从而提高系统性能。文章详细解析了享元模式的概述和角色,包括抽象享元类、具体享元类和非共享享元类。通过本文的阅读,读者可以了解享元模式的原理和应用场景,从而在实际开发中更好地利用该模式实现对象的复用。 ... [详细]
  • imnewtotheswiftandxcodeworld,soimhavingaproblemtryingtointegrateapackagetomypro ... [详细]
  • 这篇文章主要讲解了“如何应对Android面试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何应对 ... [详细]
  • 1、DashAPI文档Dash是一个API文档浏览器,使用户可以使用离线功能即时搜索无数API。程序员使用Dash可访问iOS,MacOS, ... [详细]
  • UIView的通用动画letviewUIView(frame:CGRectMake(10.0,10.0,100.0,40.0))self.view.addSubview(vie ... [详细]
  • swift中的uitable
    下面是一个静态的tableview于图可知有两个section头是11..和22..,其中222是一个tableviewcell!并且从图可知道样式是leftD ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  •   源码地址:https:github.comfzhleeSwiftUI-Guide当点击按钮时,弹出Modl模态窗口。示例代码:structContentView:View{@S ... [详细]
  • 于2012年3月份开始接触OpenStack项目,刚开始之处主要是与同事合作共同部署公司内部的云平台,使得公司内部服务器能更好的得到资源利用。在部署的过程中遇到各种从未遇到过的问题 ... [详细]
author-avatar
暗夜风线_371
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有