菜鸟教程小白 发表于 2022-12-13 16:37:52

objective-c - Objective-C中的只读层次模型


                                            <p><p>在我的 Objective-C 应用程序中,我有一个构成模型的 <code>NSObject</code> 子类的层次结构。这些对象本身没有功能,即它们只有属性,它们的唯一目的是保存数据。此外,我有一个 Controller 来管理此层次结构(树)的实例。 </p>

<p>只允许该 Controller 对树进行更改(例如树中对象的属性)。程序的其他部分应具有对(整个)树的只读访问权限。</p>

<p>完成此类访问管理的最简单方法是什么?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是<a href="http://en.wikipedia.org/wiki/Friend_class" rel="noreferrer noopener nofollow">friend classes</a>的经典案例.虽然 ObjC 不支持友元类的语言,但创建它们并不难。</p>

<p>首先,模型的公共(public)接口(interface)应该声明属性<code>readonly</code>。那部分应该是显而易见的。</p>

<p>然后在模型内部,您可以根据需要在类扩展中使您的属性可读写。 (如果你习惯了 ObjC,这也应该很明显;如果不明显,我会更新答案。)</p>

<p>现在故事的其余部分。创建一个“ friend ”类别(或“作家”或“ protected ”或任何对您有意义的名称)。</p>

<pre><code>@interface ModelObject (Friend)
- (void)setSomeProperty:(id)someProperty;
@end
</code></pre>

<p>这只是告诉任何导入此类别的人 <code>setSomeProperty:</code> 存在。现在您的控件将导入此文件 (<code>ModelObject+Friend.h</code>) 并能够设置属性。其他人都导入 <code>ModelObject.h</code> 并且该属性看起来是只读的。</p>

<p>这适用于您需要访问的任何内容,当然不仅仅是属性。我经常创建不可变的类,然后创建一个“仅限 friend ”的 <code>initWithX:andY:andZ:</code> 方法。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - Objective-C中的只读层次模型,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/12623486/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/12623486/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - Objective-C中的只读层次模型