菜鸟教程小白 发表于 2022-12-12 10:30:02

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


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

<pre><code>;
</code></pre>

<p>甚至类似:</p>

<pre><code>object.foo = @&#34;value&#34;;
</code></pre>

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

<pre><code>;
</code></pre>

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

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

<p>感谢您抽出宝贵时间阅读此问题。非常感谢您的帮助。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>根据苹果官方文档,Key-Value Coding 的定义如下:</p>

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

<p>让我们通过一些简单的例子来看看:</p>

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

<pre><code>self.firstname = @&#34;John&#34;;
</code></pre>

<p>或者这个:</p>

<pre><code>_firstname = @&#34;John&#34;;
</code></pre>

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

<pre><code>;
</code></pre>

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

<pre><code>;
</code></pre>

<p>使用 KVC:</p>

<pre><code>;
</code></pre>

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

<p>我希望您能了解这种方法及其区别。 :)</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 设置值 :ForKey: instead of set(whatever)?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/35473196/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/35473196/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 设置值 :ForKey: instead of set(whatever)?