菜鸟教程小白 发表于 2022-12-13 07:30:22

ios - 用于转发到 Objective-C 中复制的属性的正确属性语义


                                            <p><p>假设有一个 <code>UIView</code> 内部包含一个 <code>UILabel</code>。</p>

<p><code>UIView</code>的公共(public)界面在它的<code>.h</code>中如下:</p>

<pre><code>@interface MyView : UIView

@property (nonatomic, copy) NSString *text;

@end
</code></pre>

<p>并且私下在它的 <code>.m</code> 中:</p>

<pre><code>@interface MyView ()

@property (nonatomic, strong) UILabel coolLabel;

@end
</code></pre>

<p>在它的 <code>.m</code> 中实现:</p>

<pre><code>@implementation

- (void)setText:(NSString *)text
{
    self.coolLabel.text = text;
}

- (NSString *)text
{
   return self.coolLabel.text;
}

@end
</code></pre>

<p>查看公共(public)接口(interface),我用 <code>copy</code> 声明 <code>@property (nonatomic, copy) NSString *text</code> 因为文本是由 <code>coolLabel</code>内部。但是,我不确定这是否正确。</p>

<p>声明应该是 <code>@property (nonatomic, assign) NSString *text</code> 和一个 <code>assign</code> 因为我的类没有专门执行内存管理?还是我当前的接口(interface)声明正确?</p>

<p>仅供引用,一切都假设 <strong>ARC</strong></p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>你的 <code>text</code> 属性应该是 <code>copy</code> 因为它的值最终会被标签复制。</p>

<p><code>property</code> 定义就像一个契约(Contract)。您正在告诉属性的用户如何处理该值。由于标签复制了文本,因此您应该指出您的属性正在被复制。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 用于转发到 Objective-C 中复制的属性的正确属性语义,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/23374464/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/23374464/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 用于转发到 Objective-C 中复制的属性的正确属性语义