好的,我知道这个问题可能看起来无关紧要或太基本,但是 - 因为我一直想知道我在做什么以及我为什么要这样做,如果它符合我的设计 - 请阐明一下。
所以,这就是我需要的:
- 假设我们有一堂课
- 我们想在几乎任何地方使用它的方法
- 我决定使用类方法和伪全局实例,而不是传递一个对象
所以,假设我们有一个名为“MyDocumentManager”的类。
这是我通常做的:
+ (MyDocumentManager*)documentManager
{
MyDocumentManager* newDocumentManager = [[MyDocumentManager alloc] init];
if (newDocumentManager)
{
// initialize that new document manager
}
return newDocumentManager;
}
然后像这样使用它:
[[MyDocumentManager documentManager] someMethod];
但是,我经常看到人们提出类似的建议:
+ (MyDocumentManager*)sharedManager
{
static dispatch_once_t pred;
static MyDocumentManager *sharedManager;
dispatch_once(&pred, ^{
sharedManager = [[MyDocumentManager alloc] init];
});
return sharedManager;
}
所以,这是我的问题:
- 是一样的吗?
- 如果不是,有什么区别?
- 它的方法的优点/缺点是什么?(在内存/速度/等方面)
- 我应该使用哪一个,为什么?
- 它们都适合我需要它们吗?