iOS 5 阻止 ARC 桥接转换

2023-11-25

这个问题引用了这个问题:如何用Block简化回调逻辑?

我的标头有这些 typedef

typedef void (^StuffDoneBlock)(NSDictionary * parsedData);
typedef void (^StuffFailedBlock)(NSError * error);

并且在初始化中

stuffDoneCallback = Block_copy(done);
StuffFailedCallback = Block_copy(error);

在这篇论文中,它说 Block_copy 是不必要的。但接下来它需要一个桥接演员。 编译器消息如下:

error: cast of block pointer type 'StuffDoneBlock' (aka 'void (^)(NSDictionary *__strong)') to C pointer type 'const void *' requires a bridged cast [4]
         stuffDoneCallback = _bridge(Block_copy(done));
                                     ^~~~~~~~~~~~~~~~
/Developer-4.2/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/usr/include/Block.h:60:61: note: instantiated from:
 #define Block_copy(...) ((__typeof(__VA_ARGS__))_Block_copy((const void *)(__VA_ARGS__)))
                                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~

首先,你为什么要使用Block_copy()?除非你正在编写原始 C,否则你应该调用-copy相反,在块上,如[done copy]。其次,ARC 将为您复制需要超越其初始化范围的块[1],因此您甚至不需要调用-copy不再了。唯一的“例外”是块类型属性仍然需要具有copy属性。

[1]:这里似乎需要澄清。 ARC 仅在以下情况下隐式复制块:编译器看到它需要超越其初始化范围。这基本上意味着当它被分配给一个逃逸当前作用域的变量时(在父作用域中声明的堆栈变量、实例变量、静态变量等)。但是,如果它作为参数传递给方法/函数,编译器不会执行任何自动复制。通常这不是问题,因为块感知方法/函数需要保留超出堆栈帧的块(dispatch_async()、完成块等)将为您复制它们。然而,APInot块感知(例如NSArray)不会隐式复制该块,因为他们期望一个简单的-retain会成功的。如果您将块传递给非块感知 API 并且该块需要超出当前范围,则必须使用显式-copy.

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

iOS 5 阻止 ARC 桥接转换 的相关文章

  • 如何保存 1 个 xcode 项目中的所有构建设置并在其他 xcode 项目上使用它们?

    我使用 xcode 4 5 和 cordova phonegap 来构建我的应用程序 我投入了大量时间来获取适合我的 Xcode 项目的构建设置 并且我想在我正在构建的多个应用程序上重用这些设置 我正在寻找是否有一种快速的方法来导出这些设置
  • iPhone,使用 isKindOfClass 是否被认为是不好的做法?

    例如 如果有一个 处理所有 类型的方法 if obj isKindOfClass class1 else if obj isKindOfClass class2 etc 这是不好的做法吗 是否有更简洁的替代方案或更好的方法来构建代码 在运行
  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • 如何等待 webViewDidFinishLoad 完成

    我有一个初始化 webView 的布尔条件 并在 webViewDidFinishLoad 中加载另一个委托 以便在完成完成后触发 但是 由于布尔值在条件 webViewDidFinishLoad 之前返回 因此页面永远不会完全加载 如何确
  • iOS 解决方案仅当图像尚未使用 SDWebImage 缓存在内存中时才加载带有动画的图像

    我已经为这个问题苦苦挣扎了几天 以前我使用 AFNetworking 类别来加载和缓存图像 但它的回调中没有提供缓存类型 所以我过去常常在每个控制器中跟踪哪些图像已经加载 我浏览了 SDWebImage 它提供了我正在寻找的东西 SDIma
  • 使用 UIImagePickerController 的应用程序在拍照后选择“使用照片”时冻结

    我现在正在开发一个简单的照片和视频捕获应用程序 该应用程序成功地允许用户按下按钮即可拍摄照片或视频 但是 一旦您完成拍摄照片或视频 它就会提供 2 个选项 重新拍摄 和 使用照片 或 使用视频 具体取决于您使用的选项 如果用户点击 重新拍摄
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • Swift:从自定义 UITableViewCell 中的 UITextField 检索文本并将其放入数组中

    我正在制作一个非常简单的应用程序 用户在第一个屏幕中输入人数 在第二个屏幕中 它会生成一些UITableViewCell基于用户在第一个屏幕中输入的数字 这UITableViewCell have a UITextField在其中 一旦用户
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • 使用反射的属性类型或类

    我想知道是否可以确定对象属性的类或原始类型 获取所有属性名称和值非常容易 所以答案 https stackoverflow com questions 2299841 objective c introspection reflection
  • 更改 UITextField 辅助功能描述

    有没有办法将 UITextField 的辅助功能标签设置为 文本字段 之外的其他内容 因此 我不想将其称为 文本字段 而是将其命名为 代码验证字段 我的建议是不要试图在内置语音输出上智取系统 对于盲人用户来说 文本字段正在编辑 相当于 该项
  • 如何使用自签名证书为 TLS 创建 iOS NWConnection?

    我正在尝试将 Apple 的新 NWConnection 类用于我的 MQTT 客户端 为了进行测试 我需要能够创建到本地测试代理的 TLS 连接 该代理具有自签名证书 到目前为止 我只是使用以下命令设置连接 self connection
  • 在WKWebview中设置useragent

    如何在 WKWebView 中设置自定义用户代理字符串 我正在尝试嵌入我的应用程序的版本 以便我的服务器端可以看到可用的功能 我找到了以下方法 let userAgent MyApp 1 33 7 request setValue user
  • 如果 NSExtensionActivationRule 设置为仅音频,则共享扩展不会出现在有功能的应用程序中

    我正在尝试创建一个共享扩展 用户可以从任何有能力的应用程序上传她的录音 该文档甚至有一个简单的示例 请参阅声明共享或操作扩展支持的数据类型 https developer apple com library content document
  • iPhone SDK - 在后台线程中运行重复进程

    我有一个iPhone我想在其中每隔一段时间在后台执行一个方法的应用程序1第二 所以在我的主线程中 我有以下代码UIViewController viewDidLoad NSTimer timerWithTimeInterval 1 0 ta
  • Cognito/IAM 策略和 S3 获取对象

    我正在尝试将 S3 和 Cognito 集成到我的 iOS 应用程序中 但到目前为止尚未成功 我相信该错误与我针对 Auth 和 Unauth 用户的 IAM 策略有关 所以这是我的政策 Version 2012 10 17 Stateme
  • 如何在ios中以编程方式添加水平间距和垂直间距?

    我在 ios 8 中创建了一个应用程序 因为我有 4 个可垂直使用的标签 它应该在某些条件下更改位置 所以我已禁用自动布局并以编程方式设置约束 现在的问题是 我可以设置水平和垂直位置 宽度和高度的约束 但我找不到任何方法来添加标签之间的水平
  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • iOS 发送 iMessage 尽可能简单

    我希望能够以编程方式发送 iMessage 除了调用一个将文本发送到带有消息的号码的函数之外 无需执行任何其他操作 这两个消息都是文本框 我真的很感激一些示例代码 因为我在网上搜索过 但我发现没有任何帮助 这不适用于商业应用程序 仅适用于我
  • iOS 对 Google 云消息传递的支持

    我在谷歌的开发者控制台中看到 GCM 允许为 iOS 生成 API 密钥 我在网上搜索了有关如何在 iOS 应用程序中通过 GCM 实现推送通知的任何类型的文档 但没有找到答案 真的有可能在 iOS 应用程序中使用 GCM 实现推送通知 j

随机推荐

  • java applet 策略文件放置在哪里?

    我正在开发一个人工智能项目 这是一个逻辑游戏 目标是两个用户连接到网络上的服务器 充当管理员 然后开始一一玩 为了创建连接 我有一个服务器代码 它只是在 localhost 8000 上侦听 并在客户端到达时为其分配团队值 连接后 客户端在
  • CSS - 如何从div溢出到屏幕全宽

    我有一个包含 DIV 我将其用作响应式网格的一部分 它扩展到我允许的最大宽度 即 1280px 然后在大型设备上出现边距 这是我的 CSS 一些 Less container margin left auto margin right au
  • XML 中的“xmlns”是什么意思?

    我在 XML 文件中看到以下行 xmlns android http schemas android com apk res android 我也见过xmlns在我遇到的许多其他 XML 文件中 它是什么 它的意思是XML命名空间 基本上
  • 使用 JavaScript 对 CSS3 变换的值进行动画处理是否可以排除硬件加速?

    您可以通过设置动画持续时间并设置 CSS3 变换的初始值和最终值来利用硬件加速动画 如果您不设置动画持续时间并使用关键帧 而是直接使用 JavaScript 对所需 CSS3 转换的值进行动画处理 会怎样 您是否仍会利用硬件加速 或者是否会
  • 如何最好地将 CString 转换为 BSTR 以将其作为“in”参数传递到 COM 方法中?

    我需要转换一个CString实例到正确分配的BSTR并通过它BSTR转换为 COM 方法 为了让代码能够针对 ANSI 和 Unicode 进行相同的编译和工作 我使用CString AllocSysString 转换任何格式CString
  • MPI 和全局变量

    我必须实施 MPI 程序 有一些全局变量 4 个浮点数组和其他 6 个单浮点变量 首先由主进程从文件读取数据进行初始化 然后我调用 MPI Init 当排名 0 的进程等待结果时 其他进程 排名 1 2 3 4 处理数组等 问题是这些数组似
  • 在 ggplot() 中将误差线放置在列中心时出现问题

    我的条形图有问题 误差线仅出现在分组变量列的角上 而不是以集中方式出现在它们上 我正在使用的代码是这样的 a lt data frame Cond c In In Out Out Temp c Hot Cool Hot Cool Score
  • .NET 缓存(不在网站中)

    我需要一个能够响应内存压力的缓存 就像 ASP NET 中内置的缓存一样 我没有使用网站 但我正在构建 Windows 服务 有什么建议么 代码 技术 产品 只要它在内存中 我不在乎 如果您熟悉 ASP NET 缓存 System Web
  • 如何使用pvc创建postgres的helm图表

    我想使用 PVC 持久卷声明 为 PostgreSQL 创建一个 helm 图表 我考虑过尝试 katacodahttps www katacoda com courses kubernetes helm package manager使用
  • 无法建立与节点 -1 (/127.0.0.1:9092) 的连接。经纪人可能不可用

    我正在研究Spring Boot Kafka来自 Confluence 的示例并运行简单的生产者示例并出现以下错误 我使用的是 Windows 机器 并在 Windows 上安装了 ubunt 14 04 LTS 注意 即使我使用 loca
  • 如何使用 IOStream 存储格式设置?

    当为用户定义的类型创建格式化输出时 通常需要定义自定义格式化标志 例如 如果自定义字符串类可以选择在字符串周围添加引号 那就太好了 String str example std cout lt lt str lt lt lt lt squo
  • ASP.Net Core Cookie 身份验证不是持久的

    我开始使用开发网站ASP NET 核心 2 2 我正在通过自定义 cookie 身份验证 而不是身份 实现登录 注销 请查看或克隆the repo git clone https github com mrmowji aspcore cus
  • 多平台可移植Python

    我想在虚拟环境中将python安装在闪存驱动器上 这样无论我在哪里都可以开发代码 我可以在 Windows Mac Linux 计算机上使用我的闪存驱动器吗 对于 Windows 请前往 Portable Python http Porta
  • 如何使用 PHP 提取多部分 zip 文件?

    我使用了这段代码 来自 使用 php 解压文件 zip new ZipArchive res zip gt open file zip if res TRUE zip gt extractTo myzips extract path zip
  • 降低 ORMlite 的内部日志详细程度或禁用它

    我们正在我们的应用程序中进行一些重大的性能调整 因此我们开始使用方法跟踪来查找瓶颈 乍一看 Ormlite 还不错 但我们发现 例如在一个需要 8 毫秒的查询中 Ormlite 的内部日志需要 6 毫秒 75 此外 这些日志调用处于调试级别
  • 如何在 WPF RichTextBox 中将插入符号移动一定数量的位置?

    我想将插入符号移动到当前插入符号位置的右侧 4 个位置 我已注册PreviewKeyDown 并调用InsertTextInRun 当 Tab 键被捕获时 如下所示 private void rtb PreviewKeyDown objec
  • 仅限制一个方向的拖动

    Using jQuery 可拖动 如何限制可拖动对象被拖动只朝一个方向 即只有顶部或只有底部axis y 并且仅向左或仅向右时axis x 这意味着如果我想要一个可拖动的 with axis set to y 只能被拖到bottom 那么它
  • ES6 粗箭头和括号 `(...) => ({...})` [重复]

    这个问题在这里已经有答案了 我一直在研究一些 Graph QL React Relay 示例 但遇到了一些奇怪的语法 在 Graphql 对象中定义字段时 使用以下语法 const xType new GraphQLObjectType n
  • SQLModel:sqlalchemy.exc.ArgumentError:需要列表达式或 FROM 子句,

    我正在使用 SQLModel 库来做一个简单的select 就像他们官方网站上描述的那样 然而我得到了Column expression or FROM clause expected错误信息 from typing import Opti
  • iOS 5 阻止 ARC 桥接转换

    这个问题引用了这个问题 如何用Block简化回调逻辑 我的标头有这些 typedef typedef void StuffDoneBlock NSDictionary parsedData typedef void StuffFailedB