我想在Objective C中创建一个类的只读实例。我有一个向量类,它基本上是x和y位置的浮点数和一些方法。在很多情况下,我需要一个 (0, 0)-vector,所以我想而不是每次都分配一个新的,我将拥有一个共享的零向量,如下所示:
// 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;
这很好用,除了零向量不是只读的,这感觉有点傻。作为一个注释,我想提一下,这更像是一个想知道如何做的问题,而不是一个实际的问题,我不知道它是否会产生一些实际的差异。