gpt4 book ai didi

objective-c - 在没有 @property 或 getter 方法的情况下访问 Objective C ivar?

转载 作者:行者123 更新时间:2023-12-03 17:49:25 25 4
gpt4 key购买 nike

有没有办法在不使用 @property 或 getter 方法的情况下访问 Objective C 对象上的实例变量?

我这里有一个类需要能够将自身与同一类的另一个对象“合并”。问题是我需要能够访问“其他”对象的 ivars 以便将其与当前对象合并,但我不想将这些 ivars 声明为属性或实现其他一些 getter 方法,因为我不希望任何人认为他们应该以任何方式摆弄这些 ivars。

再一次,我不需要从该类本身以外的任何其他类访问 ivars。举个例子,这就是我想要做的事情:

@interface MySillyObject : NSObject
{
double _someCounter;
}

@implementation

+ (MySillyObject *)sillyObjectWithCounter:(double)counter
{
return [[[MySillyObject alloc] initWithCounter:counter] autorelease];
}

- (id)initWithCounter:(double)counter
{
if (self = [super init]) {
_someCounter = counter;
}
}

- (MySillyObject *)mergeWithOtherObject:(MySillyObject *)otherObject
{
// What do I do here?
// I need to return _someCounter + otherObject's _someCounter...
return [MySillyObject sillyObjectWithCounter:???];
}

最佳答案

实际上,您可以使用 valueForKey: 绕过几乎任何 Cocoa 对象的 ivar 访问策略;如果您知道属性或 ivar 的名称,KVC 将在类的内部进行查找并为您检索值。

但在这种情况下,您甚至不需要这样做。由于 otherObject 是同一类的成员,因此您可以直接访问它:otherObject->_someCounter。事实上,您可以在同一个类中访问它以实现任何级别的可见性,即使您在 the recommended "very private" @implementation block 中声明它也是如此。 .

关于objective-c - 在没有 @property 或 getter 方法的情况下访问 Objective C ivar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31868519/

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