菜鸟教程小白 发表于 2022-12-12 21:48:26

ios - 为只读对象的属性赋值


                                            <p><p>我有 2 个类如下:</p>

<p><strong><em>类 ModelA.h</em></strong></p>

<pre><code>@interface ModelA : NSObject
   @property (nonatomic, strong) NSArray *arrayA;
@end
</code></pre>

<p><strong><em>类 ControllerA.m</em></strong></p>

<pre><code>@interface ControllerA()
    @ property (nonatomic, copy, readonly) ModelA *modelProperty;
@end

@implementation ControllerA

- (void)someMethod:(NSArray *)sampleArray
{
    self.modelProperty.arrayA = sampleArray;
}
</code></pre>

<p>如果我尝试为 self.modelProperty 分配一些东西,我会收到一个构建错误,说我不能,因为它是一个只读属性。但是我为其属性分配了一些东西,它 XCode 没有给出任何错误,即 <code>self.modelProperty.arrayA = sampleArray</code> 构建得很好。但是,当我通过它进行调试并打印 <code>self.modelProperty.arrayA</code> 时,即使 sampleArray 中有数据,我也会得到 nil。</p>

<p><strong><em>问题:</em></strong>是否可以为只读对象的属性赋值?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><blockquote>
<p>Is it possible to assign values to a property of a readonly object?</p>
</blockquote>

<p>呃,有点。您使用的语言有点困惑。它不是一个<em>只读对象</em>;这是一个<em>只读属性</em>。并且可以为存储在只读属性中的对象赋值。</p>

<p><code>readonly</code> 只是意味着你不能<em>设置</em>那个属性——没有 <code>setModelProperty:</code> setter 方法。</p>

<p>它<em>不</em>意味着对象的目标是不可变的。它与 <code>const</code> 不同。这意味着你不能设置属性。</p>

<p>您看到 <code>nil</code> 的原因是 <em>发送到 <code>nil</code> 的任何消息都返回 <code>nil</code></em>。</em> p>

<pre><code>self.modelProperty.arrayA
</code></pre>

<p>等同于:</p>

<pre><code>[ arrayA]
</code></pre>

<p>如果 <code>modelProperty</code> 是 <code>nil</code> (从您显示的代码来看,它是),这与:</p>

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

<p>返回 <code>nil</code> -- 与 <code></code> 返回 <code>nil</code> 的方式相同。</p>

<hr/>

<p>最后说明:您已将 <code>copy</code> 设置为 <code>modelProperty</code> 属性的内存策略,但 <code>ModalA</code> 类似乎没有实现<code>NSCopying</code> 协议(protocol)。你确定不想要 <code>strong</code> 吗?</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 为只读对象的属性赋值,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23248891/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23248891/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 为只读对象的属性赋值