我想在Objective C中创建一个类的只读实例。我有一个向量类,它基本上是为x和y位置以及一些方法漂浮的。在很多情况下,我需要一个(0,0)维矢量,所以我想的不是分配每一次,我将有一个共享的零矢量一个新的,这样的事情:Objective C共享只读实例类
// Don't want to do this all the time (allocate new vector)
compare(v, [[Vector alloc] initWithCartesian:0:0]);
// Want to do this instead (use a shared vector, only allocate once)
compare(v, [Vector zeroVector]);
// My attempt so far
+ (Vector *)zeroVector {
static Vector *sharedZeroVector = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedZeroVector = [[self alloc] initWithCartesian:0:0];
});
return sharedZeroVector;
}
// The problem
v.x = 3;
这工作正常,除了零矢量不是只读的,这感觉很愚蠢。作为一个说明,我想提一提的是,这更像是一个想知道怎么样的问题,而不是一个实际的问题,我不知道它是否会产生一些实际的差异。
你是什么意思“它不是只读”?仅供参考,您**不能**做[Vector setZeroVector:foo];',因为没有实现。 – 2013-04-17 14:37:49
一个更简单的解决方法:你可以在vector类中创建一个 - (BOOL)isZero方法,然后检查coord属性,如if(self.x == 0 && ...)。这不回答你的问题,但可能是一个更清洁,更快的解决方案,您的问题:) –