Swift 保留周期和闭包

2024-01-05

我尝试做很多研究来理解保留周期。但我似乎在我的例子中找不到任何东西。我确实知道,如果我将属性设置为闭包,则会发生保留周期,并且需要使用弱或无主。但我有两个例子,我想知道它们是否正确完成:提前致谢,我已经尝试查看它们是否已经在 stackoverflow 上,但找不到任何内容。

简单的动画

UIView.transitionWithView(self, duration: 5, options: .TransitionCrossDissolve, animations:    { [weak self] in
    self?.setNeedsDisplay()
    return
}, completion: nil)

带有数组的动画

for imageView in self.townImages {
    UIView.transitionWithView(imageView, duration: 0.3, options: .TransitionCrossDissolve, animations: { () -> Void in
        imageView.image = UIImage(named: self.getImages()[count++])
    }, completion: nil)
}

在这两个例子中self是一个子类UIView。我只是想知道我做得是否正确,或者我是否也应该使用 imageView 作为弱引用。谢谢。


这些都不会创建保留循环,因为该块未附加到self。此外,具有保证寿命的保留周期并不是世界上最糟糕的事情。

让我们考虑一些例子。(抱歉,我的 swift 不是特别强,所以我要恢复到 obj-c。)


- (void)doSomething:(void(^)())block {
  self.block = block;
}

// elsewhere
  [self doSomething:^{
    self.someProperty = 5;
  }];

这会创建一个保留周期,因为self在块内被引用(不是弱引用)self持有参考。


[UIView transitionWithView:self duration:5, options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
  [self setNeedsDisplay];
} completion:nil];

这不会创建保留周期,因为animations块被发送到系统——你的UIView子类不保存对该块的引用。


边注: 你不应该需要return在你关闭结束时,但我想斯威夫特很荒谬,并试图“提供帮助”。另外,我不确定你是否需要打电话self.setNeedsDisplay()在动画期间,因为它应该自己做......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 保留周期和闭包 的相关文章

  • 奇怪的 Facebook ID [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有两个 Facebook 应用程序 它们都正在开发中 其中一个是很久以前创建的 而另一个则是相当新的 自从我升级到新的 iOS Faceb
  • 如何在 Swift 4 中以编程方式将 IBAction 添加到 uibutton?

    如何以编程方式将 IBAction 添加到 uibutton button addTarget self action Selector buttonAction for touchUpInside func buttonAction se
  • Braintree DropIn + Apple Pay,未出现 Apple Pay 项目

    我成功调用DropIn来自 Braintree SDK 的视图 这BTDropInRequest设置应显示三项 PayPal 信用卡 苹果支付 但由于某种原因在DropIn视图仅呈现两个项目而不是三个 PayPal 信用卡 我做错了什么 准
  • iOS:保持应用程序在后台运行

    如何让我的应用程序在后台运行 我需要越狱我的 iPhone 才能执行此操作吗 我只需要这个应用程序每隔设定的时间间隔从互联网上检查一些内容 并在需要时发出通知 以供我自己使用 是的 不需要越狱 查看本文档的 实现长时间运行的后台任务 部分A
  • Swift:如何在 println 之后刷新标准输出?

    如何在 Swift 中刷新标准输出println命令 也就是说 Swift 相当于什么fflush stdout in C 您可以使用 fflush stdout 导入 libc 后 if os Linux import Glibc els
  • 错误:“Int”无法转换为“@lvalue Float”

    给定以下函数 func greatestCommonDenominator first Int second Int gt Int return second 0 first greatestCommonDenominator second
  • ios 8 opengl es 1.1 已停产?

    我们即将在 iOS 应用商店上推出一款游戏 最近我们发现它无法在 iOS 8 上运行 游戏加载到黑屏 但其他一切似乎都可以运行 可以听到音乐 对触摸屏有反应 但显示屏上没有任何反应 我们的引擎相当旧并且使用 OpenGL ES 1 1 我现
  • iOS UITableViewCell需要按两次才能调用didSelectRowAtIndexPath

    我有一个 UITableView 有时需要您触摸它两次才能选择一个单元格 更多细节 仅当表格一直向上或一直向下滚动后才需要两次触摸 只需第二次触摸即可呼叫didSelectRowAtIndexPath 当表格以自然的 向上滚动位置 打开时
  • iPhone - 创建图像网格列表

    我正在开发一个应用程序 它从网站获取图像并使用网格视图向用户显示 例如Apple的照片应用程序 当您点击图像时 我会推送一个显示图像信息和其他内容的视图控制器 实现这个的更好方法是什么 我想到了自定义 UITableViewCell 我见过
  • iOS UITableViewCell 配件在左侧?

    对于我的应用程序 我想要一些可以同时具有复选标记和详细信息披露按钮的单元格 也就是说 我希望它们看起来与 iOS 设置中的 Wi Fi 网络选择一模一样 左侧的复选标记 中间的内容 右侧的详细信息披露按钮 有没有正确的方法来做到这一点 或者
  • 使用 Parse.com 上传视频

    我是解析新手 正在尝试保存视频并将其上传到云端 这是我正在使用的代码 但是当调用 didButtonAction 时 它不断收到错误 我相信问题出在将视频保存为文件时 但我不知道如何解决这个问题 先感谢您 void imagePickerC
  • Xcode 不会在故事板中显示我的文本字段占位符文本

    当我在属性检查器中分配文本字段的占位符值时 它不会显示在故事板中 但是 当我运行应用程序的模拟器时 它就在那里 我缺少什么设置吗 我只想能够在编辑器中看到占位符文本 下面是 xcode 和模拟器之一的屏幕截图 我遇到了同样的问题 幸运的是我
  • macOS 应用程序中还需要 Swift 的嵌入式 dylib吗?

    Swift 5 发行说明说 对于运行 iOS 12 2 watchOS 5 2 和 tvOS 12 2 的设备 Swift 应用程序不再在构建变体中包含 Swift 标准库和 Swift SDK 覆盖的动态链接库 但在同一上下文中没有提及
  • 编写支持 iOS 3.1.3 和 iOS 4.x 的 iOS 应用程序时的陷阱

    我想编写一个可以在 iOS 3 1 3 到 iOS 4 1 上运行的应用程序 我知道如何设置部署目标和基础 SDK 阅读 Apple 文档后 它很大程度上依赖于检查类是否可用和 或实例是否响应特定选择器 现在我的问题是 如果 Apple 从
  • 删除后台 moc 中的对象然后在主 moc 中刷新它会导致 NSFetchedResultsController 更新崩溃

    我遇到了一个NSObjectInaccessibleException我无法理解 Terminating app due to uncaught exception NSObjectInaccessibleException reason
  • Swift 中的弹出视图

    我有一个弹出视图 没有选项卡栏 它弹出到带有选项卡栏的视图控制器 在带有选项卡栏的视图控制器中 我设置了一个单击按钮 以便弹出视图控制器 IBAction func PopUpClicked sender UIButton gt Void
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 我可以在 NS_SWIFT_NAME 中使用保留关键字吗?

    我正在尝试使 Objective C 委托协议更漂亮以便在 Swift 中使用 但我在弄清楚如何使用时遇到了一些麻烦NS SWIFT NAME 是否可以使用NS SWIFT NAME指定 Swift 名称中与 Objective C 关键字
  • 应用程序图标未刷新

    我更改了新版本应用程序中的图标图像 并且我在设备中安装了旧版本应用程序 然后我安装了新版本 它在 iOS 5 中运行良好 但在 iOS 6 中 图标没有刷新 它仍然显示旧版本图标 徽标 如果没有安装旧版本应用程序 该设备在 iOS 5 和
  • 适用于 iOS 的 Google Cast SDK 2.3.0 不支持 64 位

    似乎是适用于 iOS 的 Google Cast SDK 2 3 0 版本 https developers google com cast downloads GoogleCastFramework 2 3 0 Release zip停止

随机推荐

  • Visual Studio:类型或命名空间名称“属性”不存在

    There s 另一个线程 https stackoverflow com questions 9163316 type or namespace name properties does not exist 16270872这里关于这个
  • 集合视图单元格之间不需要的空间 组合布局

    我正在将集合视图用于场景 我创建了一个自定义的构图布局 如下所示 然而 当滚动时 有一个不需要的空间单元格的第二部分之间 它发生在不同的细胞类型中 我检查了间距或插图 但无法找出原因 构图布局部分 struct UIHelper stati
  • Angular:“找不到类型为‘object’的不同支持对象‘[object Object]”。 NgFor 仅支持绑定到 Iterables,例如数组

    我创建了一个 Angular 应用程序 它从 json 文件获取数据 但我在 html 中显示数据时遇到问题 很多变数都是荷兰语 对此我感到抱歉 我对这一切也有点陌生 这是我的服务 import Injectable from angula
  • Latex IEEE 模板:在多列乳胶内容中使用单列表[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 I am trying to use this IEEE template https www sharelatex com templa
  • CSS背景图片在移动浏览器上放大

    我的网站上有一个部分使用 CSS 背景图像 该网站是here http www robertsteilberg com 您可以在 联系方式 部分中看到我在哪里有固定背景图像 这是图像的当前 CSS hs contact section co
  • 如何使用 ActionScript 获取响应标头? (闪光)

    所以 我有一个像 www example com stream 这样的 URL 我需要向此 url 发出任何请求并获取 Http Rewspons 标头 如下所示 HTTP 1 0 200 OK Content type video x f
  • 如何处理 JSF 2 中的会话过期和 ViewExpiredException?

    考虑以下场景 在会话超时 过期 后 我单击 JSF 表单的提交按钮 浏览器显示一些异常消息 ViewExpiredException 无法恢复视图上下文 我想要做的是 在会话过期后自动重定向到网站的主页 这样做的机制是什么 任何帮助将非常感
  • 无法在 iOS 上创建托管对象上下文

    我创建了一个非核心数据项目 我现在想使用核心数据 在构建阶段 我将二进制文件与 CoreData framework 链接起来 在我的应用程序委托方法中 我想手动创建一个托管对象上下文 如下所示 NSManagedObjectContext
  • 如何恢复使用策略=我们的合并?

    我正在使用一个存储库 其中几周前执行了合并 我们刚刚发现它使用了 strategy ours标志 它应该使用 strategy option ours 标志 因此不会对 HEAD 应用任何更改 但是 我们需要应用这些更改 Git 已经识别出
  • python中的正交距离回归:返回值的含义

    我正在关注正交距离回归 http docs scipy org doc scipy reference odr html id1拟合因变量和自变量均带有误差的数据的方法 我用一条简单的直线拟合数据 我的模型是y ax b 现在 我可以编写代
  • 如何为版本 2 和版本 3 设置不同的 PYTHONPATH?

    假设我将 PYTHONPATH 设置为 bashrc如下 export PYTHONPATH PYTHONPATH ver2packages 当我检查 Python 3 中的 python 路径时 python3 gt gt gt impo
  • 更改完整日历中单元格的颜色

    我需要更改 arshaw 完整日历的单元格颜色 我的要求是 公司提供的假期列表的 td 单元格应该有相同的颜色 员工休假列表的 td 单元格应该具有相同的颜色 我们如何实现这一点 我能够改变事件的颜色 但不能改变单元格的颜色 另外 如果我们
  • 如何以编程方式更改 Android 谷歌地图 v2 中的语言

    我有一个应用程序 您可以在其中更改设置中的区域设置 目的是能够在应用程序内拥有与系统区域设置不同的区域设置 我也希望能够设置地图的语言 我只能找到 设置手机的系统语言 之类的答案 这不是我要找的 有没有办法以编程方式或从 xml 设置地图的
  • Matlab聚类编码-绘制散点图

    我有一年期间每日 每年的能源消耗数据集 我想显示该数据集的散点图 分为我期望存在的四个集群 由于四个季节的差异 我知道 matlab cluster 函数可以做到这一点 但我的统计数据非常生疏 我希望得到一些指导来确定哪个函数最好使用 Th
  • 如何在 Mac 版“Visual Studio Code”中取消链接/从 Git 存储库注销

    一直在玩这个微软编辑器 相当不错 但缺少一些最基本的 UI 位 不知道如何从我之前登录的 Git 存储库中取消链接 注销 退出并重新打开该软件不起作用 而且 没用说 我有很多我使用的存储库 任何想法 在侧面板的底部 有一个帐户图标 通常位于
  • 简单的CSS固定标题

    使以下页眉成为固定页眉的最简单方法是什么 http presentationtube com header php http presentationtube com header php我应该移动标题中的菜单元素吗 templatemo
  • 根位于 arr[0] 的二叉堆有什么好处

    我正在数组上写一个二进制堆arr 除叶节点外 每个节点都有两个子节点 根可以位于arr 0 or arr 1 接受的答案在为什么在数组实现的堆中索引 0 未被使用 https stackoverflow com questions 2290
  • TFS 到 TFS 迁移工具 - 域问题

    第三方为我们开发了一些应用程序 并一直使用 MS Team Foundation Server 2008 进行源代码控制 我的公司最近设置了 TFS 2008 环境 我们正在尝试将源代码从第 3 方开发人员 TFS 迁移到我们的 TFS 机
  • SQL 不断收到 ON UPDATE CASCADE 错误

    大家好 我正在使用这个 ON UPDATE CASCADE 功能 但我仍然无法让它工作 我的第一张桌子 CREATE TABLE Stab Stab id int not null Sprache VARCHAR2 2000 Vorname
  • Swift 保留周期和闭包

    我尝试做很多研究来理解保留周期 但我似乎在我的例子中找不到任何东西 我确实知道 如果我将属性设置为闭包 则会发生保留周期 并且需要使用弱或无主 但我有两个例子 我想知道它们是否正确完成 提前致谢 我已经尝试查看它们是否已经在 stackov