【问题标题】:'assign' and 'weak' are mutually exclusive'assign' 和 'weak' 是互斥的
【发布时间】:2012-04-24 17:18:44
【问题描述】:

我正在尝试 TwitPic 使用 GSTwitPicEngine 类在 Twitter 上发布带有文本的图像,该类使用 YAJLiOS,

所以我在我的项目中添加了 YAJLiOS 框架,我在 YAJLiOS 框架中的文件“YAJLParser.h”中得到了这个('assign' 和 'weak' 是互斥的)错误。 在以下行中显示错误-

@property (assign, nonatomic) __weak id <YAJLParserDelegate> delegate;

当我删除 __weak 时,它变成 Apple Mach-O Linker (Id) 错误。

请帮助。如何处理这种错误。我不明白原因。

【问题讨论】:

  • 不应该将__weak关键字应用于类的实例变量,而不是getter/setter参数类型吗?

标签: objective-c ios4 twitter


【解决方案1】:

我真傻……

试试

@property (unsafe_unretained, nonatomic) id <YAJLParserDelegate> delegate;

【讨论】:

  • 感谢您的回复..但它给出了 unsafe_unretained 错误 - 错误 - (Apple Mach-O Linker (Id) Error.) "_OBJC_CLASS_$_OARequestHeader",引用自:objc-class-ref in GSTwitPicEngine.o
【解决方案2】:

现在你可能想通了, 无论如何,这就是我摆脱这个错误的方法:

@property (assign) __unsafe_unretained id<YAJLParserDelegate> delegate;   

确保您的 .h 代码(如果有)中的所有其他 delegate 声明都是 __unsafe_unretained,例如在@private 部分:

__unsafe_unretained id<YAJLParserDelegate> delegate;

【讨论】:

    【解决方案3】:

    您可能已经知道,assignweak 不是一回事......在功能上它们非常接近,但 weak 更复杂,也更聪明消除对已处置对象的引用以避免崩溃(除其他事项外,保留周期)。

    无论如何 - 怎么办?我最好的猜测是尝试退出 ARC 的向后兼容性旧版修复程序……将 _weak 替换为 _unsafe_unretained 并看看效果如何。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 2018-05-23
      • 2012-09-22
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      • 1970-01-01
      相关资源
      最近更新 更多