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

static MyClass *gInstance = NULL;

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

    return(gInstance);
}

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

推荐答案

另一个 Select 是使用+(void)initialize法.从文件中:

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

所以你可以做类似的事情:

static MySingleton *sharedSingleton;

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

Objective-c相关问答推荐

在 Objective-C 中完成受保护属性的解决方法

在 Objective C 中将属性标记为已弃用

在 NSData 和 base64 字符串之间转换

iOS - 应用程序关闭时的核心位置和地理围栏

为什么我们必须在 Objective-C 中做 [MyClass class]?

观察 UIDatePicker 的变化

[Facebook-iOS-SDK 4.0]如何从FBSDKProfile获取用户邮箱

如何从 Xcode4 生成 UML 图

如何测试推送通知在我的应用程序中是否有效

无法加载从笔尖引用的图像

arc4random 和 arc4random_uniform 有什么区别?

如何将 .plist 文件中的数据 struct 读入 NSArray

UITableView configureCellForDisplay:forIndexPath 中的断言失败:

Objective-C 中的 alloc、init 和 new

Objective-C:块 vs. Select 器 vs. 协议

Objective C 中的调用方法或发送消息

判断 NSString 是否仅包含字母数字 + 下划线字符

UIDatePicker 中的最小和最大日期

UITableView 在半透明的导航栏下

如何判断 NSString 的最后一个字符