如何在Objective C中创建单例类?

推荐答案

好的,appDev,你可能会在网上找到很多不同的技术来实现这一点.然而,对于iOS应用程序开发,我认为最方便的方法是执行以下操作:

  • 编写获取singleton对象的方法.(建议:使用dispatch_once线程和GCD).

  • 将方法包装在宏中,并将其添加到$Project$-Prefix.pch文件中.

  • 每当需要类的单例对象时,调用单行宏.

例子:

CommonMacros.h:

#define SINGLETON_FOR_CLASS(classname)
+ (id) shared##classname {
    static dispatch_once_t pred = 0;
    static id _sharedObject = nil;
    dispatch_once(&pred, ^{
        _sharedObject = [[self alloc] init];
    });
    return _sharedObject;
}

YourProject-Prefix.pch:

...
#import "CommonMacros.h"
...

YourSingletonClass.m:

...
SINGLETON_FOR_CLASS(YourSingletonClass)
...

Objective-c相关问答推荐

Clang:将 id 之类的类型转换警告提升为 class

TWTweetComposeViewController 在 IOS6 中已弃用

XCTAssertEqual 不适用于双精度值

XCTAssertEqual 错误:(3)不等于(3)

自动布局和按下时隐藏底栏

如何将 UInt32 设置为最大值

如何处理 Xcode 警告没有以前的函数原型......?

在 iOS 设备上本地存储图像

使用 UIView animateWithDuration 进行动画处理时无法 UIButton

如何测试生产推送通知?

iOS 5:对 UIAppearance 感到好奇

以流畅的动画显示/隐藏导航栏

如何将小时数添加到 NSDate?

无法加载 xcode 项目,因为它已从另一个项目或工作区打开

在我滚动之前,数据不会加载到 UITableView 中

将 UIColor 保存到 NSUserDefaults 并从中加载

无法在导航栏中心设置titleView,因为返回按钮

Objective-c 2.0 中的可选参数?

UIScrollView contentSize 不起作用

找出窗口中的 UIBarButtonItem 框架?