【发布时间】:2013-01-18 19:48:49
【问题描述】:
我正在尝试理解 Objective-c 中的 Singleton 概念。
我发现的大多数示例只涉及一个变量。
对于如何调整示例以处理许多变量,例如返回 x、y、z 的加速度计值,我有点迷茫。
你能再指导我一点吗?
【问题讨论】:
-
而不是一个变量使用 3....
标签: objective-c oop design-patterns singleton
我正在尝试理解 Objective-c 中的 Singleton 概念。
我发现的大多数示例只涉及一个变量。
对于如何调整示例以处理许多变量,例如返回 x、y、z 的加速度计值,我有点迷茫。
你能再指导我一点吗?
【问题讨论】:
标签: objective-c oop design-patterns singleton
Singleton 是指在应用程序的生命周期内只能存在一次的特殊对象。该对象可以根据需要拥有尽可能多的变量和属性。
// Singleton.h
@interface Singleton : NSObject
@property (readwrite) int propertyA;
@property (readwrite) int propertyB;
@property (readwrite) int propertyC;
+ (Singleton *)sharedInstance;
@end
单例的关键是它只能被创建一次。通常在 Objective-C 中我们使用@synchronized() 指令来确保它只被创建一次。我们将其放入名为sharedInstance 的便利类方法中并返回我们的Singleton。由于 Singleton 只是一个对象,它可以很容易地拥有多个属性、变量和方法。
// Singleton.m
#import "Singleton.h"
@interface Singleton ()
{
int variableA;
int variableB;
int variableC;
}
@end
@implementation Singleton
static Singleton *sharedInstance = nil;
+ (Singleton *)sharedInstance
{
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [[Singleton alloc] init];
}
}
return sharedInstance;
}
+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
return sharedInstance;
}
}
return nil;
}
- (id)init {
self = [super init];
if (self) {
// Inits
}
return self;
}
@end
这不是创建单例的唯一方法。请记住,重要的部分是它只能创建一次。因此,在为 OSX 和 iOS 开发时,您可以利用更新的 Grand Central Dispatch 调用,例如 dispatch_once。
与单身人士交谈
假设您在其他地方有另一个对象与 Singleton 对话。这可以在您#import "Singleton.h"的任何地方完成
- (void)someMethod
{
// Setting properties
int valueA = 5;
[[Singleton sharedInstance] setPropertyA:valueA];
// Reading properties
int valueB = [[Singleton sharedInstance] propertyB];
}
【讨论】: