阻止自动保留,是否会影响 self 中的 ivars?

2024-02-06

如果我有课:

@interface A : NSObject
{
    BOOL b;
    id   c;
}
@end

和参考b and c在一个块中,是块保留self自动地?要不就b and c? About c,它可能会被保留,但是怎么样b?


比尔的回答不太正确:

如果你有一个实例A并在该实例内创建一个块,如下所示:

^{
  b = YES;
}

Then self被保留(当块被复制时)。b is not const-复制,因为b被强烈引用self,并且仅self is const块范围内。

另一方面,如果你这样做:

BOOL aBool = YES;
^{
  aBool = NO;
  c = [[NSObject alloc] init];
}

话又说回来,self is const-copied(并在复制块本身时保留)并分配给c被允许。然而,分配给aBOOL is not允许,因为值aBool is const-copied.

换句话说,编译器识别b and c是 ivars,并将保留self而不是直接使用ivars。


思考这个问题的一种方法可以帮助我理解正在发生的事情,那就是记住对象实际上只是一个奇特的结构,这意味着您可以在技术上通过箭头运算符访问 ivars:->

因此,当您访问 ivars 时:

b = YES;

is 相等的 to:

self->b = YES;

从这个角度来看,这是完全有道理的why你必须保留self, but b is not const。这是因为b只是“大局”的一小部分,并且为了获得b,您必须包括所有self同样(因为复制结构体的一部分在这种情况下并没有真正意义)。

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

阻止自动保留,是否会影响 self 中的 ivars? 的相关文章

  • 隐藏 UITableview 单元格

    我正在尝试从 UITableView 中隐藏单元格 就像删除操作一样 但我只想隐藏它以便稍后在相同位置显示它 我知道 UITableViewCell 有一个名为 隐藏 的属性 但是当我使用此属性隐藏单元格时 它会隐藏但没有动画 并且会留下空
  • 4.4 中新的 Objective-c 文字

    我可以写 42 这会创建一个NSNumber with int值 42 我可以用变量来做到这一点 例如 someIntVar 显然我尝试过但它不起作用 这很糟糕 因为然后我必须经历 NSNumber numberWithInt someIn
  • 自动布局+基于总行数的动态表高度约束

    首先 这与动态单元格的高度无关 所以不要把它搞混了 我有一个场景 我创建了三张卡 详细信息卡 显示位置的具体详细信息 图表卡 根据选择显示不同的图表 更多详细信息卡 卡显示更多详细信息 以下是上述卡片的屏幕 查看以上屏幕的层次结构 Cont
  • 将 NSDictionary 保存到文件有任何限制吗

    我想用下面的方法来保存NSDictionary void writeDicToFile NSDictionary dic fileName NSString fileName NSString filePath NSTemporaryDir
  • 为什么使用 UIImageJPEGRepresentation 方法通过 writetofile 保存的 .jpeg 文件大小比 ios 中的 UIImageWriteToSavedPhotosAlbum 大

    我正在尝试拯救一个UIImage设备中 jpeg 文件的对象 我正在使用这段代码 void saveImageToDocumentsDirectory UIImage mimage withFileName NSString fileNam
  • NSLocale 货币符号,显示金额值之前或之后

    我在用StoreKit在我的应用程序中实现应用程序内购买商店 我有一个自定义设计 这意味着价格的值应该是白色的且较大的 货币符号较小 较暗并与价格值的顶部对齐 我可以使用以下命令毫无问题地获取货币符号NSLocale in SKproduc
  • 在 Objective C 中断言每个对象创建都成功是必要的吗?

    我最近阅读了Apple的示例代码MVC网络 http developer apple com library ios samplecode MVCNetworking 由 Apple 开发者技术支持大师 Quinn The Eskimo 撰
  • 允许用户从 UILabel 选择文本进行复制[重复]

    这个问题在这里已经有答案了 我有一个 UILabel 但如何允许用户选择其文本的一部分 我不希望用户能够编辑文本 也不希望标签 文本字段具有边框 这是不可能的UILabel 你应该使用UITextView为了那个原因 只需使用禁用编辑即可t
  • 如何创建一个仅接收一次信号,然后自行取消订阅/释放的 ReactiveCocoa 订阅者?

    我目前正在注册一个属性信号的订阅者 如下所示 RACAble self test subscribeNext id x NSLog signal fired 默认功能是每次 self test 更改时都会触发 但我只想触发一次 然后取消订阅
  • Lua表在内存中是如何处理的?

    lua如何处理表的增长 是否相当于ArrayList在Java中 IE 需要连续的内存空间 并且当它变得大于已经分配的空间时 内部数组被复制到另一个内存空间 有什么聪明的方法来引导吗 我的问题是 表是如何存储在内存中的 我不是问如何在 Lu
  • 如何改进 iOS 中的 TWTweetComposeViewController 代码?

    我已经实现了以下代码来进行 Twitter 共享 在我的代码中 我尝试测试 iOS 5 如果这不起作用 我会回到使用 ShareKit 的 Twitter 代码进行共享的旧方式 我向同事展示了代码 他建议我的代码可能有缺陷 我需要做两件事
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 跟踪所有 ObjC 方法调用?

    有时 当查看别人的大型 Objective C 程序时 很难知道从哪里开始 在这种情况下 我认为记录对每个非 Apple 方法的每次调用会很有帮助 有没有办法做到这一点 基本上 在某个中心位置进行一项更改 并记录调用的每个方法 最好仅限于非
  • 从 Plist 中存储和检索 [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 在 plist 文件中存储两个 NSMutableArray https stackoverflow com questions 6070568 ios store two nsmutable
  • 使用 Push Transition 效果更改 RootViewcontroller

    在我的iOS应用程序中 我需要更改应用程序之间窗口的rootviewController 因此 当我动态更改我的rootviewcontroller时 它会在更改之前轻拂视图 但我想要的是在更改rootviewcontroller时提供平滑
  • 需要 gem 是否会加载所有内容,包括我不使用的东西?

    Assume x是一颗宝石 包含两者Hello and Goodbye类 如果我写一个程序require x 但仅使用Hello班级 是个Goodbye类也加载了吗 您包含脚本或文件 而不是 gem With require x 你加载文件
  • 维护 UISegmentedControl 中的选择

    我可以保持 UISegmentViewControl 段的选定状态吗 即 即使用户选择了另一个段 也可以保持一个段显示为选中状态 我似乎在任何地方都找不到任何可以做到这一点的东西 这是不可能开箱即用的 看如何才能选择 UISegmented
  • Objective-c中的贝塞尔曲线算法

    比我聪明的人可以看一下这个吗 我正在尝试实现我发现的贝塞尔曲线算法here http webtweakers com swag GRAPHICS 0074 PAS html在 Objective c 中 输出是错误的 我想我正确地转换了代码
  • 为什么 GDB 调试器不断冻结 Xcode 4?

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

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p

随机推荐

  • 使用实体框架时,为什么我的带有数据注释的列不会映射

    我有一堂课 看起来像这样 public class Analyst Column Internal ID public int ID get set if this is named like the column it works Col
  • Apache Tomcat WebService 中的服务出现故障

    在 Web 服务中添加此方法后 我的 apache tomcat Web 服务出现错误服务 public String getAllEvent JSONArray jsonArray new JSONArray try Class forN
  • 在 sqlalchemy 中定义列 func.count 的名称

    有两张桌子 Tbl1 Table tbl 1 metadata Column id Integer primary key True Column user id Integer ForeignKey user id nullable Fa
  • 如何在 Node.js 中获取服务器目录之上的文件

    我正在尝试使用 node js 服务器提供音频文件 问题是 我希望能够获取计算机中的任何音频文件 但我不知道如何使 html 中的音频元素与服务器上方的目录一起使用 有this https stackoverflow com questio
  • Laravel classloader.php 错误无法打开流:没有这样的文件或目录

    我能够正常运行 php artisan migrate 如果我使用 Request all 我能够获取所有表单输入 但是当我尝试将数据添加到我的 mysql 数据库表时 我收到以下错误 ErrorException in ClassLoad
  • Eclipse 片段项目是否有与 BundleActivator 等效的工具?

    我正在构建一个 Eclipse 插件 它在常规插件项目中提供一组核心功能 我通过片段项目提供的可选功能 但我需要片段在启动时向主插件注册自己 我无法在片段项目中拥有 Bundle Activator 所以我想知道是否有一些替代机制来声明一个
  • 回归分析中的分类特征数据和序数特征数据差异?

    在进行回归分析时 我试图完全理解分类数据和序数数据之间的差异 目前 已经明确的是 分类特征和数据示例 颜色 红 白 黑为什么分类 red lt white lt black逻辑上是不正确 序数特征和数据示例 状况 旧的 翻新的 新的为什么序
  • 带元胞数组的 Matlab 动态字段名结构

    我如何使用动态字段名访问以下结构路径 var refxtree CaseDefinition FlowSheetObjects MaterialStreamObjects 8 MaterialStreamObjectParams Press
  • 在使用 Jest 进行测试之前等待 React 组件状态更新

    我有一个组件handleAdd功能 该函数调用一个库 该库又调用axios并返回一个承诺 一旦解决了这个问题 handleAdd 方法更新组件状态 进而渲染子组件 换句话说 它首先检查服务器以确保在本地显示该项目之前已添加该项目 使用 Je
  • Python3 将所有字符转换为 HTML 实体

    我正在使用Python3 我想知道是否有一个模块或默认函数可以将文本的所有字符转换为html实体 甚至字母和数字 因为我不想为此制作翻译映射 解决了 正如 justhalf 告诉我的 我通过创建这个函数找到了解决方案 def htmlEnt
  • 如何修复“对象不是此领域架构的一部分”

    我正在尝试设置一个使用Realm数据库 但我似乎无法使其工作 我也禁用了Instant Run但这也没有解决问题 这是我的代码文件 应用程序级别的build gradle apply plugin com android applicati
  • 如何在 OMNeT++ 中创建随机连接图?

    我正在尝试创建一个具有随机连接节点的图 节点应该随机连接 如果一个节点已经连接到另一个节点 则不应使用不同的连接再次连接到同一节点inout port 在文档中 https doc omnetpp org omnetpp manual se
  • 如何用c语言编写一个简单的malloc函数

    作为操作系统的作业 我们必须用 C 编程语言编写自己的 malloc 和 free 代码 我知道如果我要求它的代码 我就没有必要学习 我面临的问题是不知道在哪里包含初始化 50000 字节的 char 数组并使两个列表空闲和使用 在我的函数
  • 如何生成动态数组

    我必须生成一个动态菜单来从数据库中获取数据并将结果存储在动态数组中 如何在 php 中实现这一点 PHP 中的数组默认是动态的 只需向其中添加更多项目即可 如本例所示 假设数据库为MYSQL result mysql query menu
  • json.decode() 输入意外结束(在字符 1 处)

    我在登录用户时遇到了 flutter 中的匿名关闭错误 前几天还可以 但现在不行了 不知道为什么 所以请提前提供帮助和感谢 每当我填写详细信息并点击登录按钮时 它都会抛出以下错误 E flutter 2914 ERROR flutter s
  • 如何使用 ReactJS 嵌入 Gist

    我正在尝试使用 ReactJS 嵌入 Gist 但出现以下错误 无法对 文档 执行 写入 除非显式打开 否则无法从异步加载的外部脚本写入文档 这是我的组件 var EmbeddedGist React createClass render
  • 需要从 webapp 执行 shell 脚本并在页面中显示控制台输出

    我正在寻找 java 示例或库来帮助我将其集成到 Struts2 Spring 应用程序中 许多构建系统 例如 Luntbuild 或 Hudson 都具有此功能 我想在我尝试从其中一个示例中挖掘它之前 我想我会问是否有人知道一个独立的示例
  • 即使链接器可以找到该库,为什么我也会收到“DSO 丢失”错误?

    我正在针对我编写的共享库编译一个程序 这个库又依赖于Boost program options 以及其他图书馆 当我编译程序时 我当然需要提及我的库 但我收到 DSO 错误 g ism create conf cc o ism create
  • 如何在pyqt中检查复选框是否被选中

    我试图根据是否选中复选框来制作条件语句 我尝试过类似以下的操作 但它总是返回 true self folderactive QtGui QCheckBox self folders self folderactive setGeometry
  • 阻止自动保留,是否会影响 self 中的 ivars?

    如果我有课 interface A NSObject BOOL b id c end 和参考b and c在一个块中 是块保留self自动地 要不就b and c About c 它可能会被保留 但是怎么样b 比尔的回答不太正确 如果你有一