ARC抱怨实例变量

时间:2014-01-16 20:28:02

标签: ios iphone objective-c automatic-ref-counting

我正在尝试将非ARC项目转换为使用ARC但由于某种原因而抱怨 使用所有实例变量。

@property (nonatomic,retain)id myvariable;

结果

Error : "Use of undeclared variable _myvariable"

我的代码中有一些地方我不想修改保留计数但是要对属性进行赋值。所以我使用了一个实例变量。

添加@syhtnesize myvariable =_myvariable可以解决此问题,但我正在尝试找出解决此问题的正确方法。

可能的解决方案:

1)添加synthesize

2)将实例变量替换为self.myvariable并分配make属性。

编辑: 问题ARC errors的扩展

3 个答案:

答案 0 :(得分:3)

所有弧形的东西

@property (nonatomic, strong) Something *myVariable;

可以访问

self.myVariable;

_myVariable;

无需使用@synthesize

答案 1 :(得分:1)

这取决于你的需要。如果您声明属性:

@property (strong) NSString *myvariable;

并且您想要将私人ivar的名称更改为与您必须添加的_myvariable不同的内容

@synthesize myvariable = _myVarNewName

但是如果你想在前面使用与下划线完全相同的名称,只需删除@synthesize(适用于iOS 6及更高版本),编译器会完成剩下的工作,这样你就可以访问像_myvariable这样的私有变量或像self这样的公共变量。 MYVARIABLE。

答案 2 :(得分:1)

听起来你已经点击了向后兼容性功能。

由于Xcode 4.4属性声明不再需要@synthesize语句而没有一个语句,编译器会自动生成_propertyName实例变量。

然而,使用@synthesize propertyName,就像您预先Xcode 4.4一样,编译器将自动生成propertyName - 注意没有下划线 - 实例变量。

警告您“使用未声明的变量_myvariable”的编译器消息建议您已将代码切换为使用下划线但仍有一些@synthesize myvariable语句。

您对@synthesize myvariable = _myvariable的使用直接指定了用于实例变量的名称,因此解决了您的问题,但完全删除@synthesize是常用方法。