当块位于初始值设定项中时捕获块中的变量

2023-11-26

考虑一下:

id observer = [[NSNotificationCenter defaultCenter] 
    addObserverForName:MyNotification 
                object:nil 
                 queue:nil 
            usingBlock:^(NSNotification *note) {
                [[NSNotificationCenter defaultCenter] 
                        removeObserver:observer 
                                  name:MyNotification 
                                object:nil
            ];
            // do other stuff here...
    }
];

我使用这种模式来观察一次通知,然后停止观察它。但 LLVM 告诉我(在 ARC 下)变量“观察者”在被块捕获时未初始化。

我该如何解决这个问题,因为该块必须在初始化之前捕获变量,它是初始化程序的一部分?将使用__block预选赛observer做这件事吗?


正如答案中所解释的

为什么不调用从 NSNotificationCenter:addObserverForName:usingBlock 中删除观察者,

你必须

  • add __block,以便该块将引用已初始化的变量,并且
  • add __weak,以避免保留周期。 (后者仅适用于 ARC。如果没有 ARC, 该块不会创建strong参考一个__block多变的。)

所以:

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

当块位于初始值设定项中时捕获块中的变量 的相关文章

  • 自动生成的 Swift 桥接标头中“找不到接口声明”

    我当前的项目包含 Swift 和 Objective C 代码 两种类型的源文件都使用另一种语言的代码 当我进行完全清理并重新编译时 几乎每个 Swift 类声明都出现错误Module Swift h 形式为 Cannot find int
  • 如何检测 UIImage 的非透明部分何时与 UIImage 的另一个非透明部分接触

    我在完成一些我认为会容易得多的事情时遇到了困难 每当 UIImage 中图片的非透明部分接触 UIImage 中包含的图像的另一个非透明部分时 我试图运行一个方法 我举了一个例子来帮助进一步解释我的问题 正如您在上图中看到的 我有两个三角形
  • Objective-C 头解析

    我需要解析一些 Objective C 标头 我尝试过使用Doxygen并解析 XML 输出 但它不完全支持没有注释的 Objective C 标头 它会阻塞属性中定义的宏 请检查Doxygen 无法正确识别属性 https stackov
  • 为什么构造 std::string(0) 不会发出编译器警告?

    假设我有这段代码 include
  • 自动布局+基于总行数的动态表高度约束

    首先 这与动态单元格的高度无关 所以不要把它搞混了 我有一个场景 我创建了三张卡 详细信息卡 显示位置的具体详细信息 图表卡 根据选择显示不同的图表 更多详细信息卡 卡显示更多详细信息 以下是上述卡片的屏幕 查看以上屏幕的层次结构 Cont
  • 核心数据二进制数据允许外部存储崩溃

    我在 iOS 12 0 1 上发生崩溃 日志如下 ImageIO CFDataGetBytes data 0x28539b2f0 size 154262 offset 8 count 8 dst 0x16dbf86f0 External d
  • Objective-C 语法是什么,椭圆式点表示法? “……”

    我在 Joe Hewitt 的 Three20 源代码中注意到了这一点 而且我以前从未在 Objective C 中见过这种特殊的语法 甚至不知道如何在适当的谷歌搜索中引用它 来自 UITableViewDataSource TTSecti
  • 播放声音无延迟 iOS

    我找不到如何以低延迟播放真实声音的方法 我尝试使用 AVFoundation 音频播放器 巨大的延迟大约 500 毫秒 所以我尝试创建系统声音 如果运气不好 延迟大约为 200 毫秒 虽然不多 但对我来说没有用 我最多需要 50 毫秒 确保
  • 如何执行 UIAlertAction 的处理程序?

    我正在尝试编写一个帮助程序类以允许我们的应用程序支持两者UIAlertAction and UIAlertView 然而 当写alertView clickedButtonAtIndex 方法为UIAlertViewDelegate 我遇到
  • 使用 Python 查找 Mac OS X 中的当前活动窗口

    有没有办法使用 Python 在 Mac OS X 上查找给定时间当前活动窗口的应用程序名称 这应该有效 usr bin python from AppKit import NSWorkspace activeAppName NSWorks
  • Objective c:如何只删除目录下的所有文件但保留目录本身

    我发现下面的代码可以删除objective c中的文件 但我只想删除目录下的所有文件Caches并保留目录Caches itself 有人可以建议这样做的方法吗 Thanks NSFileManager filemgr filemgr NS
  • 应用程序在第二次运行 nsnull 计数的循环时崩溃

    我有一个循环 第一次运行正常 但第二次循环时我得到 NSNull count unrecognized selector sent to instance 0x3a094a70 Terminating app due to uncaught
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 使用 Objective-C 在 iPhone 应用程序中显示或隐藏 UIButton

    我在用UITextView编辑文本 我想用两个UIButtons编辑并保存 最初我想显示编辑UIButton 当用户单击编辑时我想显示保存UIButton 当内容成功保存后 我不想再显示保存按钮 我是一名 C 编码员 在 C 中我曾经这样做
  • 对 UIImage 进行方形裁剪,导致图像拉伸

    当尝试执行 UIImage 的中心裁剪时 我得到以下结果 左侧是原始图像640 1136 右边是适合正方形的裁剪图像UIImageView at 320 320 turns to 我对比率元素进行了相当多的修改 以便它可以正确检测要修剪的量
  • 在 iOS 中录制音频并永久保存

    我制作了 2 个 iPhone 应用程序 可以录制音频并将其保存到文件中并再次播放 其中之一使用 AVAudiorecorder 和 AVAudioplayer 第二个是苹果的在这里说话 http developer apple com l
  • 使用反射的属性类型或类

    我想知道是否可以确定对象属性的类或原始类型 获取所有属性名称和值非常容易 所以答案 https stackoverflow com questions 2299841 objective c introspection reflection
  • 维护 UISegmentedControl 中的选择

    我可以保持 UISegmentViewControl 段的选定状态吗 即 即使用户选择了另一个段 也可以保持一个段显示为选中状态 我似乎在任何地方都找不到任何可以做到这一点的东西 这是不可能开箱即用的 看如何才能选择 UISegmented
  • 增加 NSData 的长度

    基本上 我有一个 46 个字符的 NSString 我将其转换为 NSData 我需要将字符串填充到 48 个字符 仅在 NSString 末尾添加 是行不通的 所以 我只是使用以下方法增加了 NSData 的长度 NSString str
  • 为什么 GDB 调试器不断冻结 Xcode 4?

    这真是一个奇怪的错误 我正在开发一个使用相机源的 iPhone 项目 并通过 OpenGL 着色器运行它以对其应用效果 然而 每次我在代码中简单地创建一个新的 GLfloat 时 调试器都会在启动时冻结 我无法复制和粘贴文本 因为整个 XC

随机推荐

  • 插入金钱时使用的 SQL 数据类型

    我正在使用 Oracle SQL 数据库 我必须插入货币值 工资 作为行的一部分 由于某种奇怪的原因 金钱命令不起作用 是否有任何替代方法可以解决这个问题 数据输入格式 00 000 000 CREATE TABLE staff staff
  • 使用 Compact Framework 设置数据网格中的列宽

    我正在尝试设置数据网格中列的宽度 我使用 Compact Framework 2 0 和 C 我尝试了这个 但它给了我一个 超出债券 的错误消息 foreach DataGridColumnStyle vColumnStyle in dat
  • 如何与子进程共享父进程的 numpy 随机状态?

    我在程序开始时设置了 numpy 随机种子 在程序执行期间 我使用多次运行一个函数multiprocessing Process 该函数使用 numpy random 函数来绘制随机数 问题是Process获取当前环境的副本 因此 每个进程
  • 我们如何在React js中使用axios发送OAuth2.0

    我正在解决一个身份验证问题 我必须为我的 React 应用程序实现 OAuth2 0 身份验证 有什么方法可以使用基于 Axios Promise 的库进行身份验证吗 您必须在标头中传递您的令牌 见下文 const instance axi
  • 在 Perl 中比较多个字符串

    我的代码是这样的 if var eq str1 var eq str2 var eq str3 有没有办法优化这个 我想要类似的东西 if var eq str1 str2 str3 根据字符串的内容 正则表达式非常方便 if var st
  • JSON.stringify 深层对象

    我需要一个函数从任何参数构建 JSON 有效字符串 但是 通过不两次添加对象来避免递归问题 通过截断超过给定深度来避免调用堆栈大小问题 一般来说 它应该能够处理大对象 但代价是截断它们 作为参考 此代码失败 var json JSON st
  • Z3:在求解过程中提供随机解

    我尝试了以下代码http rise4fun com z3 tutorial declare const a Int assert gt a 100 check sat get model 结果总是a 101 我需要答案中的一些随机性 它会产
  • pygraphviz ValueError:在路径中找不到程序点[重复]

    这个问题在这里已经有答案了 问题是 我使用的是 Windows7 并且安装了 pygraphviz 库和 Graphviz 应用程序 Graphviz 应用程序位于 C Program Files 中 当我在 python 上运行程序时 出
  • 是否有跨浏览器的方式来压缩页面上的文本?

    我正在寻找一种方法来压缩页面上相对较小的文本区域 以模仿使用非标准字体完成的图形按钮 理想情况下 只有字母会被压扁或变薄 而单词之间的间距或多或少相同 我知道有一些 CSS 属性可以做这样的事情 但它们更关注字母之间的间距 而不是字母本身的
  • HTML 格式的 Python 单元测试报告

    如何生成 HTML 格式的 python 单元测试报告 再次返回答案 报告可以使用 HTMLTestRunner 生成 例如 import random import unittest import HTMLTestRunner class
  • 如何在引导程序中制作固定位置行?

    我有一个类似表格的结构 其中第一个 div class row 充当表的标题 我正在尝试修复它 因此当我向下滚动页面时 用户仍然可以看到列标题 我给它定位 固定 这实现了这一点 但现在 列的宽度被丢弃了 div class containe
  • 如何从匿名类返回值?

    我有以下代码 正如你所看到的方法postTestResults应该返回一个布尔值 现在的问题是在postTestResults我创建一个内部类AsyncHttpResponseHandler我覆盖onSuccess and onFailur
  • 如何使用 WiX Burn MBA 捆绑包在主要升级期间检测当前安装的功能?

    我正在使用 WiX 3 7 的刻录 托管引导程序应用程序功能来创建基于 MBA 的自定义安装程序 对于我的捆绑包链中的每个软件包 在执行 MinorUpdate 时 我可以轻松检测到哪些软件包功能已安装 以确保在升级过程中通过使用引导程序的
  • ImportError:没有名为 sklearn.feature_extraction.text 的模块

    我使用来自python 2 7 and pacman包管理器 并用它安装 sclearn 但是当我遇到导入错误时 gt gt gt from sklearn feature extraction text import TfidfVecto
  • 替换单词列表中字符串中的多个单词

    我有一个单词列表 string BAD WORDS xxx o2o My list is actually a lot bigger about 100 words 我有一些文本 通常很短 最多 250 个单词 我需要删除所有BAD WOR
  • 我们可以在不同域的两个页面之间使用 IndexedDB 吗?

    我在我的一页中创建了一个 IndexedDB 对象存储 让对象存储名称为 ShopStore 现在我想从不同的页面打开相同的对象存储 是否可以 我的两个网页位于不同的域中 根据MDN您不能对indexedDB进行跨域访问 出于安全原因 您不
  • 我如何知道一个 STL 对象占用了多少内存?

    我需要收集有关程序中内存使用情况的统计数据 我的代码大部分是用STL编写的 有什么方法可以了解 STL 对象消耗了多少内存 例如 string s1 hello string s2 hellohellohellohellohellohell
  • shell中如何处理超过10个参数

    我在 Linux 上使用 bash shell 想要在 shell 脚本中使用超过 10 个参数 使用花括号将它们分开 echo 10 任何位置参数都可以保存在变量中以记录其使用并使后面的语句更具可读性 city name 10 如果传递的
  • 确定更改的事件是否因用户输入而发生

    在 C 中 无论该值是由用户直接更改还是由于某些其他事件而以编程方式更改 控件 例如 numericupdown 的 Changed 事件都会被触发 有没有办法确定事件是否是由于用户输入而发生的 例如 手动更改 numericUpDown1
  • 当块位于初始值设定项中时捕获块中的变量

    考虑一下 id observer NSNotificationCenter defaultCenter addObserverForName MyNotification object nil queue nil usingBlock NS