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

objective-c - 带 +(void)load 的单例安全


                                            <p><p>我刚刚查看了 NSObject 的头文件,并且正在创建一个单例类。我遇到的问题是它基本上需要从应用程序开始加载,因为单例通过观察 NSNotifications 并在被询问时报告当前状态来维护应用程序的状态。</p>

<p>我的解决方案是在 NSObject 上使用 <code>+(void)load</code> 方法。当类加载到内存中时,我打算重写 load 方法,并在那个阶段分配单例。</p>

<p>Apple 的文档没有明确说明在加载方法期间调用 <code>[[*class* alloc] init]</code> 是否安全。我通常会假设它是,除非它被记录在案,但考虑到这个项目的重要性,以及我每次启动应用程序时都会加载它的事实,我想知道任何人都知道这是否安全与否,只是为了安心。</p>

<p>非常感谢您的帮助。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这取决于您调用 <code>init</code> 时您的类(及其父类(super class))究竟做了什么。在 <code>load</code> 期间,不保证其他类可用。如果你的类的 <code>init</code> 不需要任何其他类,你也许可以摆脱它。</p>

<p>在 <code>+ (void)initialize</code> 中执行此操作会更安全,并且如果需要在应用程序启动期间调用设置函数(例如,从 <code>application:didFinishLaunchingWithOptions:</code> 在 iOS 上)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 带 &#43;(void)load 的单例安全,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7259098/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7259098/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 带 &#43;(void)load 的单例安全