为什么我不应该在 init/dealloc 中使用 Objective C 2.0 访问器? [关闭]

2024-04-03

In @mmalc's https://stackoverflow.com/users/23233/mmalc response https://stackoverflow.com/questions/155964/what-are-best-practices-that-you-use-when-writing-objective-c-and-cocoa#156288 to 这个问题 https://stackoverflow.com/questions/155964/what-are-best-practices-that-you-use-when-writing-objective-c-and-cocoa他指出“一般来说,你应该not在 dealloc(或 init)中使用访问器方法。” 为什么 mmalc 这么说?

我能想到的唯一真正原因是性能和避免 @dynamic setter 的未知副作用。

讨论?


它基本上是最大限度地减少错误可能性的指南。

在这种情况下,您的 setter/getter 可能会无意中对对象的状态做出直接或间接的假设。当对象正在设置或销毁时,这些假设可能会出现问题。

例如,在下面的代码中,观察者不知道“Example”正在被销毁,并且可以假设已经释放的其他属性是有效的。

(您可能会争辩说,您的对象应该在拆除自身之前删除所有观察者,这将是一个很好的实践,也是防止意外问题的另一个准则)。

@implementation Example

-(void) setFoo:(Foo*)foo
{
   _foo = foo;
  [_observer onPropertyChange:self object:foo];
}

-(void) dealloc
{
   ...
   self.foo = nil;
}

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

为什么我不应该在 init/dealloc 中使用 Objective C 2.0 访问器? [关闭] 的相关文章

  • NSArray 对象的 RACSignal

    我的 ViewController 上有一个 NSArray 的 ViewModel 对象 property 非原子 强 NSArray viewModels ViewModel 对象看起来像这样 interface ViewModel N
  • 在 Swift 中使用 commitEditingStyle 动态删除 UITable 部分

    我正在处理一个无法解决的问题 我有一个来自客户数据库数组的名称表 每个客户在其他数据成员中都有一个名称属性 我可以成功删除某个部分中的行 但我不能删除该部分 当该部分中的最后一行被删除时 该部分必须消失 I got NSInternalIn
  • NSOperation 中委托的使用

    我正在尝试利用CLLocationManager in an NSOperation 作为其中的一部分 我需要能够startUpdatingLocation然后等到收到 CLLocation 后才完成操作 目前我已经完成了以下操作 但是委托
  • 将捕获的图像精确裁剪为 AVCaptureVideoPreviewLayer 中的外观

    我有一个使用 AV Foundation 的照片应用程序 我使用 AVCaptureVideoPreviewLayer 设置了一个预览层 它占据了屏幕的上半部分 因此 当用户尝试拍照时 他们只能看到屏幕上半部分看到的内容 这很好用 但是当用
  • 由于 2.23 导致 iOS 应用程序被拒绝 - iOS 数据存储指南

    以下是 Apple 关于拒绝的消息 2 23 应用程序必须遵循 iOS 数据存储指南 否则将被拒绝 2 23 详情 在启动和内容下载时 您的应用程序会存储 6 5 MB 这并不意味着 遵守 iOS 数据存储指南 下一步 请验证只有用户使用您
  • 如何在应用程序项目中使用 Cocoa Touch 框架

    我熟悉构建单个 iOS 应用程序 但我坚持使用 Cocoa Touch 框架向多个应用程序共享通用代码 问题 框架的头文件不可见 无法链接到消费应用程序项目 我做了什么 1 我创建了一个名为 libTestFramework 的项目 Coc
  • 无法按住 CTRL+拖动 NSButton 到自定义 NSView 标题

    我想创建一个自定义的NSTableCellView由 Interface Builder 实例化 我已将 Table Cell View 类设置为MyTableCellView 并正确创建MyTableCellView NSTableCel
  • 与新 Apple Music 应用程序中相同的动态状态栏

    是否可以动态着色statusBar这是在新的苹果音乐应用程序 Edit iOS 8 4 中的新 Apple Music 应用程序具有此功能 打开应用程序 选择并播放歌曲 状态栏为白色 向下滑动播放器控制器以查看 我的音乐 控制器 它有黑色状
  • 如何将CIFilter应用到UIView上?

    根据Apple docs 过滤属性CALayer不支持iOS 当我使用正在申请的应用程序之一时CIFilter to UIView即 Splice Funimate 和 Artisto 的视频编辑器 Videoshow FX 这意味着我们可
  • 如何为 Nslocal 通知设置自定义重复间隔......?

    我是 iphone 开发新手 我正在尝试在我的项目中使用 NslocalNotification 我需要每 2 小时或每两天或每两个月等给出提醒 目前我正在使用 NslocalNotification 重复间隔 但它仅适用于使用 Ncale
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且
  • 从plist文件中读取数据

    我正在尝试为我的 iPhone 应用程序实现保存状态 我有一个名为 SaveData plist 的 plist 文件 我可以通过以下方式读取它 NSString pListPath2 bundle pathForResource Save
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • 如何为 NSAttributedString 内的文本设置“隐藏”属性?

    我有一个 Cocoa 应用程序NSTextView控件将其文本保存在NSAttributedString 实际上我相信这是一个NSMutableAttributedString 我可以轻松地在该字符串内的不同字符范围上设置和修改不同的文本属
  • 添加/删除带有动画的 UITableViewCell?

    我知道这听起来像是一个愚蠢的问题 但我到处都看过 我怎样才能做到这一点 我知道如何使用 swype to delete 方法来执行此操作 但是我如何在该函数之外执行此操作 请发布一些代码示例 Thanks Coulton self tabl
  • 如何从 AFNetworking 和 AFJSONRequestOperation 获取可变字典?

    我将 JSONKit 与 AFNetworking 的 AFHTTPClient 带有 AFJSONRequestOperation 一起使用 我似乎无法弄清楚如何触发使用 JSONKit 的 mutableObjectFrom 方法 而不
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • iOS 视图控制器内存在被关闭后未释放

    当用户单击按钮时 它会显示一个带有两个视图控制器的新选项卡栏视图控制器 我是这样做的 ACLevelDownloadController dvc ACLevelDownloadController alloc initWithNibName

随机推荐

  • 从 bash 在默认编辑器中打开文件

    如何使用 bash 打开使用默认 GUI 编辑器生成的脚本生成的文件 在 OS X 上有命令open 但据我所知 linux 上不存在 什么是好的跨平台替代方案 执行open somefile ext在 OS X 上 效果与我在 Finde
  • 无法在 ASP.NET 中纠正 VeraCode CWE ID 918 - (SSRF)

    长话短说 无论我如何尝试 VeraCode 都会继续将我的 8 行代码标记为 CWE 918 缺陷 这是旧代码 所以我不确定为什么它突然被标记 这是一个示例 offending 方法 其中标记行以粗体显示 public virtual as
  • ItemTouchHelper startSwipe 不起作用

    我尝试在适配器内使用 startSwipe 但似乎不起作用 奇怪的是 当我尝试用手指手动滑动它时 它起作用了 只是当我单击支架内的按钮时 startSwipe 不起作用 需要这方面的帮助 这是我调用 startSwipe 的地方 在 onC
  • Intellij+Springboot+Thymeleaf+gradle - 自动重新加载html资源

    我正在使用 IntelliJ Ultimate Spring Boot 和 Thymeleaf 我想启用 HTML 自动重新加载 而无需重新启动服务器 也无需使用 CTRL F9 我已经阅读了以下内容 我认为它应该有效 但事实并非如此 ht
  • 自定义适配器不显示任何项目

    这是先前问题的后续 ListView android 行中的 ImageButton 不工作 https stackoverflow com questions 29819256 imagebutton within row of list
  • Google 地图路线 API - 到达时间?

    我使用 Google Directions API 来计算两个地点之间所需的时间 API 给了我一个选择departure time 我可以在其中传递出发时间 或 现在 的时间戳 那么答案就是duration in traffic 这真的很
  • 使用 PyQT 逐帧加载 opencv 视频

    我正在尝试加载一个 mat 文件 具有被跟踪对象的位置坐标 并加载一个视频文件 为了加载视频文件 我使用 opencv 我制作了一个 GUI 来加载它们 一旦有人按下开始按钮 视频就会开始播放 暂停会停止播放 这是它的 GUI 这是我遇到的
  • 如何从 Perl 设置 Windows PATH 变量?

    我需要在 Perl 中设置环境变量 理想情况下 我需要查询一个变量 然后在不需要时更改它 具体来说 我要更改的是 PATH 变量 我如何获取和设置这些变量 如果您需要全局且永久地更改环境变量 就像在控制面板中设置它一样 那么您必须与注册表混
  • 捕获一个索引位置中的字符串并移动到 xml 文件中的另一个索引位置

    我是一名 Python 初学者 想要将现有的 xml 文件转换为 LaTeX 文档 xml 包含许多脚注 有时会被拆分 因为它们不适合原始文档 一本旧书 中的一页 并且 xml 文件的创建者希望布局尽可能接近原始文档 在分割的脚注之间有普通
  • git log 不显示提交,但 git log 显示编辑文件的提交

    我在寻找丢失的零钱时发现了这个奇怪的问题 我输入 git log httpd conf 我按照预期得到了一堆提交哈希 但不是我所做的 当我输入 git log 我看到了我所做的承诺 当我跑步时 git show
  • 安装最新版本的 jenkins 时出现问题

    在我的 Ubuntu 机器上 我尝试本地安装 jenkins 我已经遵循了这个指南 https wiki jenkins ci org display JENKINS Installing Jenkins on Ubuntu https w
  • 无法使用 add() 添加 jvmArgs,为什么?

    谁能解释为什么第一个示例有效而第二个示例不起作用 test jvmArgs Xdebug Xrunjdwp transport dt socket server y suspend y address 4000 test jvmArgs a
  • MySQL InnoDB auto_increment 值增加 2 而不是 1。 病毒?

    有一个 InnoDB 表 用于存储自定义构建的 Web 应用程序使用的博客文章的评论 最近我注意到评论的自动递增主键值增加了 2 而不是仅增加 1 我还注意到 在另一个用于记住最后几个评论者的足迹签名 例如 ip 会话 id uagent
  • 如何使用 Google Guice 实现“机器人腿”用例?

    我正在学习 Google Guice 你知道如何实现 机器人腿 问题吗 让我用一个例子来解释这一点 假设我有一些名为Service Singleton public class Service Inject Source source 界面
  • ruby on Rails rspec 错误

    我正在阅读 通过示例学习 Rails 一书 并尝试运行测试 由于某种原因 我无法让 rspec 正常工作 如果我运行rspec spec 按照他的指示执行命令 我收到以下错误 rspec spec home desktop rvm gems
  • Mysql select for update - 它没有锁定目标行。我如何确保它确实如此?

    所以 select for update 的语法是这样的 SELECT 1st query FROM test WHERE id 4 FOR UPDATE UPDATE test 2nd query SET parent 100 WHERE
  • MVC3 字典未绑定到模型

    我有一个包含字典属性的模型 这是从一个更大的项目中提炼出来的 我已确认该示例仍然存在相同的问题 public class TestModel public IDictionary
  • MATLAB Quiver - 小箭头

    我正在尝试使用 MATLAB 中的 quiver 函数绘制 x 和 y 速度 我有 x y u 和 v 数组 具有它们通常的含义 尺寸为 100x100所以 结果是我的箭袋图很密集 除非放大 否则我看不到箭头 有点像这样 颤抖不画箭头只是很
  • 是否有一个Python包可以解析带有节的可读数据文件

    我正在寻找一种方法来解析带有部分的可读 即不是二进制 数据文件 我一直在使用 ConfigObj 读取配置文件 INI 文件 但遇到了多行列表的问题 具体来说 ConfigObj 不允许列表成员包含回车符 换句话说 以下内容无法解析 sec
  • 为什么我不应该在 init/dealloc 中使用 Objective C 2.0 访问器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi