gpt4 book ai didi

iphone - 声明两个具有不同名称的属性将指向同一个变量

转载 作者:行者123 更新时间:2023-11-29 13:36:42 26 4
gpt4 key购买 nike

一般来说,我希望具有不同名称的属性指向同一个变量。

这样做的原因是我希望我的类符合 MKAnnotation 并且我希望 title 属性与我的其他名为 name 的属性具有相同的值并且对我来说非常重要的是不要更改我的原始属性的名称(姓名)。

有没有一种聪明的方法可以做到这一点,而无需拥有两个对象并将一个对象克隆到另一个对象中?

最佳答案

HotLicks 和 TheSaad 的答案的问题与键值观察 (KVO) 合规性有关。如果有人正在观察您的 name 属性,您需要在其他人调用 setTitle: setter 时通知他们。反之亦然。

我会像往常一样推荐@synthesize-ing 您的属性之一。例如,我假设 name 就是这样完成的。然后,您需要让另一个,title 在这种情况下,传递给该属性并告诉 KVO 有关依赖项:

- (void) setTitle:(NSString*)newTitle
{
self.name = newTitle;
}

- (NSString*) title
{
return self.name;
}

+ (NSSet *)keyPathsForValuesAffectingTitle
{
return [NSSet setWithObject:@"name"];
}

要了解最后一种方法,请阅读 +[NSKeyValueObserving keyPathsForValuesAffectingValueForKey:] 的文档.

你不能只是 @synthesize 都指向同一个 ivar(例如 _name),然后只提供 +keyPathsForValuesAffectingTitle 方法通知 KVO title 依赖于 name,因为这不会让 name 的观察者知道什么时候 setTitle:已被调用。您可能想通过提供 +keyPathsForValuesAffectingName 来告诉 KVO 另一个方向的依赖关系来解决这个问题。我认为这行不通,即使在实验中似乎如此,我也不会依赖它。它容易出现无限递归,或者框架简单地忽略循环依赖(以避免无限递归)。

关于iphone - 声明两个具有不同名称的属性将指向同一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10412849/

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