当前位置: 首页 > 面试题库 >

我的Objective-C单例应该是什么样?

徐瑞
2023-03-14
问题内容

我的单例访问器方法通常是:

static MyClass *gInstance = NULL;

+ (MyClass *)instance
{
    @synchronized(self)
    {
        if (gInstance == NULL)
            gInstance = [[self alloc] init];
    }

    return(gInstance);
}

我可以做些什么来改善这一点?


问题答案:

另一种选择是使用该+(void)initialize方法。从文档中:

运行initialize时恰好在该类或从其继承的任何类从程序内部发送其第一条消息之前,一次将其发送到程序中的每个类。(因此,如果不使用该类,则可能永远不会调用该方法。)运行时initialize以线程安全的方式将消息发送给类。超类在其子类之前收到此消息。

因此,您可以执行以下操作:

static MySingleton *sharedSingleton;

+ (void)initialize
{
    static BOOL initialized = NO;
    if(!initialized)
    {
        initialized = YES;
        sharedSingleton = [[MySingleton alloc] init];
    }
}


 类似资料:
  • 我搜了Swift的书,找不到@同步的Swift版本,请问在Swift中如何进行互斥?

  • 我正在运行一个模型来检测图像中一些有趣的特征。我有一组600x200像素的图像。这些图像具有我想识别的岩石碎片等特征。想象一个(4x12)网格覆盖在图像上,我可以使用注释器工具手动生成注释,例如((4,9),(3,10),(3,11),(3,12)),以识别图像中感兴趣的单元格。我可以用Keras建立CNN模型,输入为灰度图像。但我应该如何对输出进行编码。在我看来,一种直观的方法是将其视为形状的稀

  • 我写了一个程序来模拟商店里的篮子。用户可以添加和删除篮子中的物品。现在,我想知道,我(void)方法的单元测试应该是什么样子。我正在使用JUnit4。 我试图更改我的方法以返回布尔类型,而不是什么都不返回。有了它,我就可以编写简单的

  • 问题内容: 我正在使用Max OS X Mountain Lion,java -version返回“ 1.6.0_37”。但是我无法使用导入的com.apple.eawt。*类编译项目。 我必须安装什么才能在系统上安装Apple Java Extensions? 任何帮助,将不胜感激! 更新 : 我从编译器收到以下错误: 更新2 : XCode版本4.5.2已安装 更新3 : 我的问题的原因是在类

  • 我的老师让我这样做,但在评论区我被告知我不应该这样做。 为什么?

  • 问题内容: 我是一名C ++程序员,偶尔使用MySQL处理数据库,但是我的SQL知识非常有限。但是,我当然愿意改变这一点。 目前,我正尝试仅通过SQL查询对数据库中的数据进行分析(!)。但是我将放弃,而是将数据导入C 并使用C 代码进行分析。 我已经与同事讨论了这一点,他们也促使我使用C ++,他说SQL并不是用于复杂的分析,而是主要用于导入(从现有表中)和导出(到新表中)数据,还有更多内容。例如