“assign”和“weak”是互斥的。

3
我正在尝试使用GSTwitPicEngine类和YAJLiOS来推特上发布带图片的文字。因此,我将YAJLiOS框架添加到我的项目中,但是在YAJLParser.h文件中出现了错误('assign'和'weak'是互斥的)。在以下代码行中出现错误:
@property (assign, nonatomic) __weak id <YAJLParserDelegate> delegate;

当我去掉 __weak 后,它就变成了 Apple Mach-O Linker (Id) Error。

请帮忙处理这种错误。我不知道原因。


1
__weak关键字不应该应用于getter/setter参数类型,而应该应用于类的实例变量,是吗? - trojanfoe
3个回答

1

我太傻了...

尝试

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

谢谢你的回复。但是它在使用 unsafe_unretained 时出现了错误 - 错误 - (Apple Mach-O Linker (Id) Error.) "OBJC_CLASS$_OARequestHeader", 在 GSTwitPicEngine.o 中引用了 objc-class-ref。 - Naina Soni

1

可能你现在已经明白了,不过这是我如何解决这个错误的方法:

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

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

__unsafe_unretained id<YAJLParserDelegate> delegate;

0

正如你可能已经知道的那样,assignweak并不是同一回事...从功能上讲,它们非常接近,但是weak更加复杂,巧妙地将对已释放对象的引用置空,以避免崩溃(在保留周期等方面也有其他作用)。

无论如何 - 怎么办?我最好的猜测是尝试提取ARC的向后兼容性遗留修复...用_unsafe_unretained替换_weak,看看效果如何。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接