KVC setNilValueForKey:建议调用方法而不使用属性访问器

2024-04-05

The KVC文档 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/AccessorConventions.html says

当您尝试将属性设置为 nil 时,会调用键值编码方法 setNilValueForKey: 方法。

到目前为止听起来不错

...使用 setValue:forKey: 设置新值。这维护了模型的封装,并确保由于设置该值而应发生的任何其他操作将实际发生。这被认为是比调用访问器方法或直接设置实例变量更好的做法。

为什么最好的做法是致电-setValue:forKey:在 - 的里面-setNilValueForKey:在基本类型或值类型属性上设置“默认”值时的方法?使用 KVC 方法是否有性能或技术优势-setValue:forKey:与属性访问器相反(我假设当它说访问器方法时它也适用于访问器属性,因为它们只是该方法的语法糖)?通常,当苹果推荐“最佳实践”时,会有性能或可靠性方面的考虑。有谁知道有记录的原因why?


从你的报价来看:

这维护了模型的封装,并确保由于设置该值而应发生的任何其他操作将实际发生。

Calling setValue:forKey:代替访问器或更改 ivar 可确保维持所有适当的副作用。当引用提到维护封装时,这意味着保留 KVC 方法而不是自定义访问器。呼唤setValue:forKey:也意味着您可以让运行时来决定如何为您设置该属性。最后,“附加操作”可能指的是键值观察。它将确保调用正确的方法,而不是任何不应该调用的方法。

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

KVC setNilValueForKey:建议调用方法而不使用属性访问器 的相关文章

随机推荐

  • SQL:将个人的不同诊断放入水平行中

    我正在为一家心理健康组织使用 Microsoft SQL Server 2008 我有一个表列出了所有客户及其诊断 但客户的每个诊断都位于新行中 我希望它们全部排在一行中 水平列出 并附有每次诊断的日期 有些人只有一项诊断 有些人有 20
  • C++ 中“\n”和“\n”有什么区别?

    我已经看到新线了 n在我看过的一些代码示例中使用了两种不同的方式 第一个是 n 第二个是 n 有什么区别以及为什么要使用 n 我明白了 n 代表一个 char 和 n 代表一个字符串 但这有关系吗 n 是一个字符常数 n 是一个指向字符数组
  • 为什么元素的属性出现在内联函数的范围内?

    鉴于此代码
  • 记录多线程应用程序中的活动

    我有一个 Java 分层应用程序 它有一个从不同点调用的多线程数据访问层 对该层的一次调用可能会产生多个线程来并行化对数据库的请求 我正在寻找的是一个日志记录工具 它允许我定义由各种线程组成的 活动 因此 数据访问层中的相同方法应根据其调用
  • Rails 3 中全局变量的放置位置

    我曾经将全局变量放入我的 Rails 2 3 8 应用程序的environment rb中 例如 MAX ALLOWD ITEMS 6 它似乎在 Rails 3 中不起作用 我尝试将其放入 application rb 中 但这没有帮助 你
  • Angular 2/4:如何在动态创建的组件上添加表单控件?

    我正在尝试使用 ComponentFactoryResolver 创建反应式表单 我想要以该形式添加的所有组件都是特定的 并实现 ControlValueAccessor 接口 所以 我的问题很简单 如何在使用 ComponentFacto
  • 检查关联数组是否包含值

    Array 0 gt Array questionID gt 47 surveyID gt 51 userID gt 31 question Title gt Choose Any One question Type gt Dropdown
  • 使用 Python 进行视频流传输

    Python 中是否有任何库 或 应用程序可支持视频流 它必须读取文件并需要通过网络进行流式传输 查看波动 http flumotion net 它是一个用Python实现的流媒体服务器
  • Xdebug 未加载

    Windows 7 64 位 PHP 5 3 10 php xdebug 2 1 4 5 3 vc9 x86 64 我通过粘贴 phpinfo 的输出获得了正确的下载here http xdebug org wizard php 这就是我的
  • RabbitMQ 启动失败

    RabbitMQ Windows 服务将无法启动 C Program Files x86 RabbitMQ Server rabbitmq server 3 0 4 sbin gt rabbitmq service bat start C
  • OpenAI API 错误 500:“服务器在处理您的请求时出错”、503:“服务不可用”或 504:“网关超时”

    我创建了一个 Python 脚本 该脚本循环遍历文本字符串列表 每个字符串的长度约为 2000 个字符 并总结每个字符串 请参阅下面的响应代码 此提示位于 for 循环内 response openai Completion create
  • 如何右键单击列表框中的项目并在 WPF 上打开菜单

    我有一个包含文件的列表框 我希望能够右键单击并打开 删除 之类的菜单 以便从列表框中删除文件 目前我在右键单击列表框中的项目后具有此功能 private void listBoxFiles PreviewMouseRightButtonDo
  • 先进先出 (FIFO) 库存成本核算

    这是一篇有趣的文章 我发现它对我的项目很有用 基于集合的 Speed Phreakery 先进先出库存 SQL 问题 http www simple talk com sql performance set based speed phre
  • React Router + Axios 拦截器。如何进行重定向?

    我有一个 axios 拦截器 当用户被强制注销 由于令牌过期 时 我想返回我的主页 我不确定如何将反应路由器传递给它 我正在使用 mobx 但不确定这是否能帮助我解决这个问题 export const axiosInstance axios
  • plupload跨域上传200 http错误

    我想使用 plupload 库将文件上传到远程服务器 使用 html5 运行时的 Chrome 32 0 和 IE 10 一切正常 但当我尝试使用 Firefox 27 html5 运行时 或 IE 8 html4 运行时 时 出现错误Er
  • Mozilla 扩展的内容安全策略

    我在 Mozilla 和 Chrome 中都有一个扩展 在我的扩展中我调用了一个远程 JS 文件 为了避免 Chrome 中的 CSP 我将规则添加到 manifest json 中 并且我的文件通过 HTTPS 传输 因此一切都很完美 但
  • 流星中的页面转换?

    我有一个流星移动应用程序结构上在职的 我确实需要将视图与一些页面转换缝合在一起 我看了看铁过渡剂 https github com tmeasday iron transitioner项目但看起来开发已经停止了 最后一次提交是在 6 个月前
  • 连接 MYSQL 表并按两个字段排序?

    我在 MYSQL 中对表进行排序时遇到问题 我的桌子设置如下 订单详细信息 Order ID 运输费 printed 产品详情 ID Order ID SKU 位置 我想选择打印 FALSE 的所有订单 但还要按运费排序 然后按 SKU l
  • 在 Android 中,即使屏幕进入睡眠模式后仍会继续振动

    在我的应用程序中 我通过以下代码启动 VIBRATOR SERVICE long pattern 50 100 1000 Vibrator vibe Vibrator context getSystemService Context VIB
  • KVC setNilValueForKey:建议调用方法而不使用属性访问器

    The KVC文档 http developer apple com library mac documentation Cocoa Conceptual KeyValueCoding Articles AccessorConvention