Ios 自定义getter/setter不工作

Ios 自定义getter/setter不工作,ios,objective-c,macos,Ios,Objective C,Macos,我有一个属性,有时需要是强引用,而其他时候需要是弱引用。我想我已经用以下自定义getter/setter破解了它: - (PropertyData *)property { return _strongProperty? _strongProperty : _weakProperty; } - (void)setProperty:(PropertyData *)newProperty { _strongProperty = newProperty; _weakPrope

我有一个属性,有时需要是强引用,而其他时候需要是弱引用。我想我已经用以下自定义getter/setter破解了它:

- (PropertyData *)property
{
    return _strongProperty? _strongProperty : _weakProperty;
}

- (void)setProperty:(PropertyData *)newProperty
{
    _strongProperty = newProperty;
    _weakProperty = nil;
}

- (void)weaken
{
    if (_strongProperty != nil) {
        _weakProperty = _strongProperty;
        _strongProperty = nil;
    }
}
以前有一个名为
属性
的ivar和一个
@合成属性
。我将两者都删除并替换为:

PropertyData __weak *_weakProperty;
PropertyData *_strongProperty;
使用此类的类在希望转换为弱引用以防止保留循环时调用
弱化

这一切都可以在iOS上运行,但在OSX上运行相同的代码根本不起作用。在调试器中,
setProperty:
从一开始就对任何一个新IVAR没有影响,并且在调用
delever
之前崩溃


在编写自定义getter/setter(部署目标OS X 10.10)时,我不清楚是否需要
@synthesis a=b
语句。在这种情况下,不清楚该如何做,因为有两个支持IVAR。

遵循惯例,否则会混淆任何人,包括你自己

用下划线开始实例变量。不要使用合成器


除此之外,你还有两个问题。第一,调用两次将属性设置为nil。其次,很有可能您的财产只有一个引用计数,并且在您调用时消失

如果您要声明自己的ivar和自定义getter和setter,则不需要
@synthetic
。以上方法对我来说很好。El Cap,Xcode 7.1。你能更具体地说明你所得到的错误吗?我没有答案,但我真的很好奇你对这个“功能”可能有什么样的用例。@NicholasH。谢谢你的尝试!
setProperty
中的断点被命中,但这两个赋值没有任何效果,因此在
property
上发送消息会导致EXC\u BAD\u访问(code=1,address=0x27)我刚刚发现此项目的OS X版本仅针对32位,ARC被禁用(显然无法在32位上启用)。对不起大家。不确定是否删除该问题。打得好,谢谢;相应地编辑代码和问题。和+1表示合成器中没有“z”。但问题还没有解决。我刚刚发现这个项目的OSX版本只针对32位,ARC被禁用(显然不能在32位上启用?)。对不起大家。不确定是否删除该问题。