• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 设置值 :ForKey: instead of set(whatever)?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:30:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

据我所知,在 Objective-C 中,有多种方法可以为属性(或键)设置值。如果给定属性的名称是“foo”,我主要会执行以下操作:

[object setFoo"value"];

甚至类似:

object.foo = @"value";

但是,在某些情况下,我已经看到他们使用它的代码:

[object setValue"value" forKey"foo"];

这两种方法之间的确切区别是什么(除了 Xcode 会为您自动完成第一种方法)?

另外,使用第二种方法是否安全?(setValue:forKey

感谢您抽出宝贵时间阅读此问题。非常感谢您的帮助。



Best Answer-推荐答案


根据苹果官方文档,Key-Value Coding 的定义如下:

键值编码是一种间接访问对象属性的机制,使用字符串来标识属性,而不是通过调用访问器方法或通过实例变量直接访问它们。

让我们通过一些简单的例子来看看:

假设我们有一个名为 firstname 的属性,我们想将值 John 分配给它。通常,我们会在代码中这样写:

self.firstname = @"John";

或者这个:

_firstname = @"John";

很熟悉,对吧?现在,使用 KVC 机制,上面的分配看起来像下一个:

[self setValue"John" forKey"firstname"];

如果您仔细观察,这看起来类似于我们为字典设置值的方式,或者将标量值和结构转换为 NSValue 对象时的方式。如您所见,我们为键名设置了值 John。再举一个例子:

[someObject.someProperty setText"This is a text"];

使用 KVC:

[self setValue"This is a text" forKeyPath"someObject.someProperty.text"];

在这两个示例中,我们不是直接将值(第一个示例)设置为属性或使用属性的 setter 方法(第二个示例),而是简单地将值匹配到键或键路径(更多关于键和键路径在一会儿)。正如您所假设的,因为我们使用键和值,所以上述技术称为键值编码。

我希望您能了解这种方法及其区别。

关于ios - 设置值 :ForKey: instead of set(whatever)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35473196/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap