Objective-C ARC __weak变量引用触发警告“无法在自动变量上指定__weak属性”

时间:2012-08-23 09:25:46

标签: objective-c ios automatic-ref-counting objective-c++ weak-references

我有一个应用程序(只有ios5),在方法内部声明一个在块内使用的弱变量来引用一个视图控制器的实例。

 QRCodeViewController * __weak weakSelf = self;

问题是编译器显示警告:

  

__弱属性无法在自动变量

上指定

在那个应用程序中我使用了很多弱引用,我从来没有看过这样的警告,与其他类的唯一区别是这个类是在.mm文件中实现的,因为它使用了c ++对象和项目可以如果我把它留作.m,我就会编译。
我必须说代码似乎工作正常 有什么建议吗?

2 个答案:

答案 0 :(得分:4)

面对同样的警告,我按照以下方式使用__block属性消失:

__block __weak MyViewController* weakSelf = self;

答案 1 :(得分:0)

我不确定为什么警告说无法指定__weak。 AFAIK应该可以指定它,即使将__weak用于自动变量也是非常危险的。

Apple文档说如果你这样做,编译器会提供警告,但是实际的警告文本似乎暗示该属性将被忽略,不仅仅是使用它是危险的,而文档似乎暗示它是危险的但它按预期工作(如果你真的明白会发生什么)。

您必须做一些实验来验证警告文本是否不合适,或者文档是否未正确更新。