gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:58:11 25 4
gpt4 key购买 nike

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

[object setFoo:@"value"];

或者甚至是这样的:

object.foo = @"value";

但是,在某些情况下,我看到他们使用这个代替的代码:

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

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

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

感谢您花时间阅读这个问题。非常感谢您的帮助。

最佳答案

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

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

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

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

self.firstname = @"John";

或者这个:

_firstname = @"John";

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

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

如果你仔细观察,这看起来类似于我们将值设置为字典的方式,或者将标量值和结构转换为 NSValue 对象时的方式。如您所见,我们为键 firstname 设置了值 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com