我正在尝试将非ARC项目转换为使用ARC但由于某种原因而抱怨 使用所有实例变量。
@property (nonatomic,retain)id myvariable;
结果
Error : "Use of undeclared variable _myvariable"
我的代码中有一些地方我不想修改保留计数但是要对属性进行赋值。所以我使用了一个实例变量。
添加@syhtnesize myvariable =_myvariable
可以解决此问题,但我正在尝试找出解决此问题的正确方法。
可能的解决方案:
1)添加synthesize
2)将实例变量替换为self.myvariable
并分配make属性。
编辑: 问题ARC errors的扩展
答案 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
是常用方法。