块中的WeakSelf

2023-12-05

有一个关于弱自我、阻塞和保留周期的问题。

通过这本书,我明白我们需要在块中使用weakself.. 问题是,什么时候?

例如,简单的动画代码,永远不要包含weakself..

i.e

self.myView.alpha = 1.0;
[UIView animateWithDuration:0.2 animations:^{
self.myView.alpha = 1.0; 
}];

这段代码可以吗?或者我应该在块之前创建一个weakself并在里面使用它?

在我所有的代码和我曾经参与过的所有其他项目中,从未见过任何一行使用弱自我。 我现在尝试在每个块中使用weakself.. 只是我不确定是否有必要

期待您的意见 谢谢


当存在循环引用的可能性时,您应该使用弱自我。

想象一下 foo 的实例对 bar 具有强引用。现在你给 bar 一个块来引用 foo 的 self。现在有人释放了 foo,但 bar 保留了该块。现在 foo 对 bar 具有强引用,而 bar 在块中拥有对 foo 的强引用。 Foo 不会被释放,因此 bar 也不会被释放,因为 bar 保留着它。但唯一保留在 bar 上的是现在未使用的 foo。您已经获得了一个保留周期,并且这两个对象现在漂浮在内存中,无法访问。

UIView 的动画不会造成任何问题,因为该块是在 animate: 方法返回之前调用的,并且 UIView 不会保留该块。

每当 ARC 发现存在循环引用的可能性时,它通常都会向您发出警告。但情况并非总是如此。一个好的经验法则是,当你不知道区块会在哪里时,就使用弱自我。

希望这能有所帮助。

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

块中的WeakSelf 的相关文章

  • 如何阻止我的应用程序设置“隔离”位?

    从 OS X 10 7 3 开始 我的文本编辑器就在它接触的任何文件上设置 隔离 位 我的文本编辑器设计用于处理 shell 脚本 如果设置了隔离位 则无法从命令行执行 shell 脚本 直到您在 Finder 中双击它并浏览 此应用程序是
  • 从 Google/Facebook 帐户重新验证用户身份

    因此 我需要创建一个 REST API 来为 IOS 应用程序提供功能 我们允许用户仅使用普通帐户或使用脸书 谷歌登录 我最近一直在阅读 OAuth 我想我了解在我的情况下如何使用 OAuth 的过程 当用户使用脸书 谷歌登录 在我的应用程
  • 将 Javascript 变量传递给 Objective-C

    我已经了解了如何将 Objective C 变量传递给 JavaScript 在ios中将目标c变量传递给javascript https stackoverflow com questions 3641968 passing object
  • 如何在文本末尾添加按钮,如 Facebook 的“继续阅读”?

    当状态帖子太长时 Facebook 应用程序会剪切文本并在末尾添加 继续阅读 它如何知道在哪里剪切文本并添加 继续阅读 不仅仅是向 textView 或标签添加按钮 而是如何剪切字符串 例如 在下图中 我将行数限制为 7 我可以在 text
  • 如何在 iPhone 应用程序的 url 中传递字符串值

    NSURLRequest request NSURLRequest requestWithURL NSURL URLWithString http www krsconnect no community api html method ba
  • just_audio 无法在 ios flutter 上工作未处理的异常:(-11800)操作无法完成

    我正在尝试从它自己的存储库运行 just audio 示例项目https github com ryanheise just audio tree master just audio example https github com rya
  • 我如何知道 UITableView 何时完成 ReloadData?

    我试图在执行完成后滚动到 UITableView 的底部 self tableView reloadData 我原本有 self tableView reloadData NSIndexPath indexPath NSIndexPath
  • 当 iPhone 设备方向朝上/朝下时,我可以判断它是横向还是纵向吗?

    我得到这个代码 如果设备处于左 右横向或上下颠倒状态 它会旋转并显示另一个视图控制器 但如果它的方向朝上或朝下 那么我如何判断它是横向模式还是纵向模式 因为我只想在它面朝上或朝下以及横向模式下旋转 void viewDidAppear BO
  • 我可以使用 NSDateFormatter 将此日期字符串转换为 NSDate 吗?

    我有这个字符串 2010 08 24T16 00 00 05 00 我想从中提取时间部分 即 16 00 并将其转换为 12 小时等效值 即下午 04 00 我正在尝试使用 NSDateFormatter 来完成此任务 但它不起作用 NSD
  • 从 NSString 的第一行删除换行符

    我怎样才能删除第一个 nNSString 中的字符 编辑 只是为了澄清一下 我想做的是 如果字符串的第一行包含 n 字符 请将其删除 否则不执行任何操作 即 如果字符串是这样的 nhello this is the first line n
  • 处理 NSPropertyListSerialization 中的 CFNull 对象

    在我的应用程序中 我尝试序列化服务器响应字典并将其写入文件系统 但对于某些响应 我收到错误 属性列表格式无效 原因是服务器响应中的 CFNull 对象 现在 服务器响应将不断变化 因此我没有明确的方法来删除 CFNull 对象 下面是我的代
  • 将 HTML 字符串加载到 UIWebView 中的延迟

    我在导航控制器中有两个视图控制器 第一个视图控制器有一个带有按钮的菜单 按下此按钮将移动到第二个视图控制器并将 html 字符串加载到 UIWebView 中 没有其他东西被加载到 webview 中 只是一个简单的 NSString 其中
  • Apple 推送通知徽章编号

    我开发了服务器端应用程序 以在收到新通知后将徽章编号维护为递增或递减 并在看到通知后删除它工作正常 但是显示徽章时存在一些问题 实际情况是 在设备上收到新通知后 我单击取消按钮 然后徽章编号正确显示 但之后我将打开应用程序并关闭应用程序徽章
  • 带约束的 Swift 动画

    是否可以通过改变约束来制作 UIView 动画 基本上 我想要动画myv UIView 具有 x y 高度和宽度约束 使用 UIView animateWithDuration 1 5 通过改变旧的限制 是的 这是可能的 你可以这样做 fu
  • Apple Mach-O 链接器错误 armv7s 和 libGoogleAdMobAds.a

    我刚刚升级了我的应用程序以在新的 iPhone5 模拟器上运行 但是当我尝试为我的 iPhone 4S 设备构建它时 我收到此 Apple Mach O Liner 错误 ld 文件是通用的 3片 但不包含 n armv7s 切片 User
  • 即时将图像添加到 AR 资源以进行图像识别

    ARKit1 5介绍图像识别 在代码中 您必须创建一组参考图像 如下所示 let referenceImages ARReferenceImage referenceImages inGroupNamed AR Resources bund
  • extern NSString *const 在类中。

    你好 我有这个头文件 import
  • 如何在 XCode5 中将部署目标更改为 5.1.1 [重复]

    这个问题在这里已经有答案了 我正在一个项目中工作 我需要支持 iOS 5 1 1 但在 部署目标 的下拉菜单中我没有 5 1 1 作为选项 我的问题是如何将 iOS 5 1 1 添加为部署目标 我将非常感谢你的帮助 如果您愿意 您可以在框中
  • 桌面上的 AVAudioSession?

    在 mac 桌面上 我试图录制系统声音 以及可选的麦克风声音 但一开始我只是录制系统声音 我正在遵循本指南 https www appcoda com ios avfoundation framework tutorial https ww
  • 如何将 NSAppTransportSecurity 添加到 Cordova 项目

    我正在从事一个 ionic cordova 项目 该应用程序需要配置 iOS 9 版本的应用程序传输安全例外 有谁知道如何将以下配置添加到 cordova 项目配置文件中 配置 xml

随机推荐

  • 如何读取无符号整型的特定位

    我有一个 uint8 t 我需要读 写特定位 我将如何去做这件事 具体来说 我的意思是 我需要写入一个值的前 7 位 然后读取另一个值的最后一位 编辑 忘记指定 我将把它们设置为大端 您正在寻找位掩码 学习如何使用 C 的按位运算符 等等都
  • 在 Windows 上规范化路径时,Java 是否需要支持 ERROR_NO_MORE_FILES?

    问题 一些用 Java 实现的守护进程在 Windows 7 上运行 将文件从一个目录复制到另一个目录 而源目录和目标目录都是 Windows Server 2016 托管的网络共享 复制是使用 Apache Commons IO 完成的
  • 对于非 ASCII 字符串,UrlHelper.IsLocalUrl 方法始终返回“false”

    我最近发现 UrlHelper IsLocalUrl方法总是返回false 如果它检测到非 ASCII 字符url范围 Example var isLocal UrlHelper IsLocalUrl false 这是一个错误 还是 设计使
  • 什么是“运行时”?

    我听说过 C Runtime Visual C 2008 Runtime NET Common Language Runtime 等 什么是 runtime 确切地 它是什么做的 它如何与我的代码交互 或者更准确地说 它是如何控制我的代码的
  • 如何在catch中打印错误

    catch let error as LocksmithError print error it would print the case of the error 但是如果我这样做 catch LocksmithError Duplica
  • 如何更改表格的字体大小

    我正在画一张桌子matplotlib axes Axes table像这样 sub axes table cellText table vals colWidths 0 15 0 25 rowLabels row labels loc ri
  • PubSub REST 订阅拉取未返回所有消息

    我们使用要拉取的 REST 服务 API来自 PubSub 订阅的消息 准备好接受服务的消息被确认 而其他消息则在稍后的执行周期中未被确认而需要接受服务 在执行周期中 我们发送一个single请求给pull服务 REST API with
  • SPARQL 过滤器语言(如果可能)在多值上下文中

    考虑以下来自 GeoNames 数据库的摘录 prefix gn
  • 适用于 iPhone 的地理空间库

    我正在考虑创建一个位置感知 iPhone 应用程序 该应用程序可以通过与兴趣点 POI 列表打包来离线工作 该应用程序将从中读取用户的当前位置CoreLocation并按照距用户当前位置的远近顺序生成 POI 列表 我需要两个基本的地理空间
  • ImageView 拒绝父级的圆角和边框

    我有一个有多个孩子的视图 我想给整个组圆角 如下所示 我试图通过给父 LinearLayout 及其 ImageView 通过背景提供圆角来做到这一点 LinearLayout 和子级
  • 在 Swift 4 中从 InputStream 中准确读取 n 个字节

    我有一个通过 TCP 向我发送消息的服务器 其中前 4 个字节确定消息其余部分的长度 所以我需要 1 将4个字节读入UInt32 有效 并将其存储到预期字节数 2 read 预期字节数字节到message 现在我的代码如下所示 privat
  • 部分细胞进料负载

    各位新年快乐 目前 我正在使用以下默认方式访问和加载 Google 表格工作表 URL metafeedUrl new URL SPREADSHEET URL SpreadsheetEntry spreadsheet service get
  • 单元测试和检查私有变量值

    我正在使用 C NUnit 和 Rhino Mocks 编写单元测试 以下是我正在测试的课程的相关部分 public class ClassToBeTested private IList insertItems new List publ
  • 放弃 C++20 中显式函数模板特化的访问检查规则

    温度规格 6通过实现添加到 C 20P0692R1 专业化访问检查 emphasis mine 温度规格 6常用的访问检查规则不适用于声明中的名称显式实例化或明确的专业化 但出现在函数体 默认参数 基本子句 成员规范 枚举器列表或静态数据成
  • 我可以手动创建核心数据实体类的实例以供临时使用吗?

    我有一个核心数据实体的自定义类 称为 朋友 当我解析 XML 文件时 我需要创建临时实例来保存临时数据 此时不使用 Core Data 所以有两个选择 A 创建一个 NSMutableDictionary 来保存临时数据 同时从 XML 解
  • “&&”在这个批处理文件中起什么作用?

    我收到了回答我一个问题的人发来的一行代码 但我很困惑 在这个批处理文件中做什么 echo off set p Quest How are you today echo Quest gt Results txt findstr r i not
  • 在 python 中绘制使用 matplotlib 分段定义的函数

    我正在尝试绘制我分段定义的函数 举个例子 以 def f x y if x in I open 0 1 if y in I open 0 1 return x y else return 0 然后我将 Z 定义如下 X np arange
  • Java 10 下的 Eclipse Window Builder 错误

    Eclipse 在 0 下运行 但该 Java 项目的 Java 合规级别为 10 因此 WindowBuilder 将无法从该项目加载类 对项目使用较低级别的 Java 或使用较新的 Java 版本运行 Eclipse 这是我安装窗口生成
  • 缩小时 OSMDroid 崩溃

    我在我的应用程序中添加了一个 OSMDroid 地图 它工作正常 但如果我缩小 它就会崩溃 我在用户当前位置加载地图时添加了一个项目 并在加载地图后在 AsyncTask 中再加载 10 个项目 更新 工作解决方案 在下面的旧代码中 我在用
  • 块中的WeakSelf

    有一个关于弱自我 阻塞和保留周期的问题 通过这本书 我明白我们需要在块中使用weakself 问题是 什么时候 例如 简单的动画代码 永远不要包含weakself i e self myView alpha 1 0 UIView anima