菜鸟教程小白 发表于 2022-12-12 23:12:17

ios - 对属性和 ivars 感到困惑


                                            <p><p>我意识到这里已经有很多关于属性与 ivar 的问题,但经过大量研究后,我似乎无法找到明确的答案。</p>

<p>我了解,当您声明如下属性时,编译器会自动为您合成支持 ivar 和两个访问器方法:</p>

<pre><code>@property NSString *myString;
</code></pre>

<p>让我感到困惑的是,<code>myString</code> 是一个实际的实例变量吗?我问这个的原因是因为你永远不能像这样访问它:</p>

<pre><code>NSLog(@&#34;Value of myString is: %@&#34;, myString);
</code></pre>

<p>您要么必须使用支持 ivar <code>_myString</code>,要么使用一种 getter 方法,例如 <code></code> 或 <code>self.myString</code>。所以我很困惑,因为通常你可以简单地使用变量名。</p>

<p>最重要的是,有人告诉我,您不应该将 <code>myString</code> 称为属性,并且属性一词只能用于引用两个访问器方法,它们是当您使用 <code>@property</code> 指令时,编译器会为您合成。</p>

<p>您说“我有一个名为 myString 的属性”真的是错误的吗?如果这是错误的,那么正确的说法是什么?</p>

<p>任何帮助解决这个问题将不胜感激。我整天都在努力巩固属性和 ivars 是不同事物的想法。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这里是您问题的答案-</p>

<pre><code>is myString an actual instance variable? - No
Would it really be wrong for you to say &#34;I have a property called myString&#34; , and if that is wrong then what would be the correct way to say it? - No its not wrong to call it.
</code></pre>

<p>所以看起来真正让你感到困惑的是命名约定,如果你仔细阅读属性后面的命名约定 - </p>

<p><code>当您使用@property 语法来声明对象的属性时,如“封装数据”中所述,编译器会自动合成相关的getter 和setter 方法(除非您另有说明)。如果您出于任何原因需要提供自己的访问器方法实现,请务必确保为属性使用正确的方法名称,以便通过点语法调用您的方法,例如。</code></p>

<p><code>除非另有说明,否则 getter 方法应使用与属性相同的名称。对于名为 firstName 的属性,访问器方法也应称为 firstName。此规则的异常(exception)是 bool 属性,getter 方法应以 is 开头。例如,对于一个名为 paused 的属性,getter 方法应称为 isPaused。</code></p>

<p><code>属性的 setter 方法应使用 setPropertyName: 形式。对于名为 firstName 的属性,setter 方法应称为 setFirstName:;对于名为 paused 的 bool 属性,setter 方法应称为 setPaused:.</code></p>

<p>查看开发者网站了解详细说明 -
<a href="https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html" rel="noreferrer noopener nofollow">https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/Conventions/Conventions.html</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 对属性和 ivars 感到困惑,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/24378359/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/24378359/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 对属性和 ivars 感到困惑