Ios 将不推荐的属性重新指定给新属性objective-c

Ios 将不推荐的属性重新指定给新属性objective-c,ios,iphone,objective-c,Ios,Iphone,Objective C,我有一个属性,我想更改它的名称。基本上,我希望旧属性返回/设置新属性的值,以便现有代码不会中断,但使用新名称时会发出警告 这在我的头文件中: @property (nonatomic, strong) MyClass *newProperty; @property (nonatomic, strong) MyClass *oldProperty __attribute__((deprecated)); 要使oldProperty的getter和setter只需在实现中设置/返回newPrope

我有一个属性,我想更改它的名称。基本上,我希望旧属性返回/设置新属性的值,以便现有代码不会中断,但使用新名称时会发出警告

这在我的头文件中:

@property (nonatomic, strong) MyClass *newProperty;
@property (nonatomic, strong) MyClass *oldProperty __attribute__((deprecated));
要使oldProperty的getter和setter只需在实现中设置/返回newProperty的值,我想做如下操作

@synthesize oldProperty=_newProperty;
这会引发错误“oldProperty和newProperty都声明实例变量_newProperty”。实现我想做的事情的最好方法是什么?(我正在弃用和重命名大约30个属性)

手动设置getter/setter将返回相同的错误

- (void)setOldProperty:(MyClass *)oldProperty {
    _newProperty=oldProperty;
}

- (MyClass *)oldProperty:(MyClass *)oldProperty {
    return _newProperty;
}
EDIT:我在BlackRiders输入的帮助下使用的解决方案-----------------------------------------------

接口:

@property (nonatomic, strong) MyClass *newProperty;
- (void)setOldProperty:(MyClass *)oldProperty __attribute__((deprecated));
- (MyClass *)oldProperty __attribute__((deprecated));
实施:

- (void)setOldProperty:(MyClass *)oldProperty {
    _newProperty=oldProperty;
}

- (MyClass *)oldProperty {
    return _newProperty;
}

我只有一个实际属性,以避免混淆和名称冲突。例如:

property (getter=oldProperty, setter=setOldProperty:) MyClass *newProperty;

您还可以选择创建方法
newProperty
setNewProperty:
。您还可以在希望人们停止使用的getter和setter中插入一些
#warning
语句。

您可以想到为什么我不使用@property(getter=newProperty,setter=setNewProperty:)MyClass*oldProperty。这样,如果我想的话,我可以使用新的二传手,而不是让旧的二传手到处乱放?看来你说的很管用!当然,也可以这样做:)或者使用默认访问器正常地声明
newProperty
,创建方法
oldProperty
setOldProperty:
,并在其中抛出警告。这种解决方案的一个小问题是,实例变量仍然是通过自动合成创建的。这不是一个“大”问题,但你应该意识到。如果执行不正确,这也会破坏KVO和KVC。简言之,我不会冒险。这是一个正确的观点,但我认为KVO可能会与任何涉及两个属性(或一个属性和两对getter和setter)的解决方案决裂。我在编辑问题时解决它的方式如何?KVO没有任何问题吗?重构以删除对旧属性的所有引用…这是在一个由多个开发人员在多个项目中使用的框架中。这真的不是我能控制的选择。