gpt4 book ai didi

objective-c - Objective C 共享类的只读实例

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:58 26 4
gpt4 key购买 nike

我想在 Objective C 中创建一个类的只读实例。我有一个向量类,它基本上是 x 和 y 位置的 float 和一些方法。在很多情况下,我需要一个 (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;

这很好用,除了零向量不是只读的,这感觉有点傻。作为说明,我想提一下,这更像是一个想知道如何做的问题,而不是实际问题,我不知道它是否会产生一些实际的不同。

最佳答案

常见的解决方案是让所有实例不可变(参见 NSNumberNSDecimalNumber 等),可能有第二个可变类(NSString vs NSMutableStringNSArrayNSMutableArray)。

关于objective-c - Objective C 共享类的只读实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16062957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com