问题描述
- 关于iOS中@property和@synthesize问题求教
-
.h中代码
@property(retain,nonatomic) NSMutableArray *arr;.m中代码
@synthesize arr;如果是这样的话,在.m中使用_arr 就会报错,说_arr没有申明的错。
但是如果.m中的代码改为
@synthesize arr = _arr;
那么使用_arr 就不会报错。
这是为什么呢??
解决方案
1.之前一直以为属性@property是不需要实例化的。所以没有实例化这个概念了。在项目中,model里的一些属性也是直接调用一些框架的。所以也不需要在代码里实例化。再一般而言,xib中的一些View,button也是不需要用代码去实例化的。
和@property对应的是@synthesize方法。Xcode编译器会自动添加@synthesize xx=_xx;这样子的代码。
@synth......
答案就在这里:iOS中关于属性@property和@synthesize的问题:
----------------------
解决方案二:
这是一个很有意思的问题.
@property(retain,nonatomic) NSMutableArray *arr
@synthesize arr;
你都已经这样写了为什么不直接用arr呢
如果你想用_arr;
那你就只要在.h里 @property(retain,nonatomic) NSMutableArray *arr
这要就可以用_arr;
PS:在iOS里 下划线 开头的变量是有特别的意义的.自己的开发的时候别随便用下划线开头命名变量.
解决方案三:
改成@synthesize arr = _arr;
解决方案四:
这都什么年代了,还用这个,现在只要使用@property声明,都会自动生成get和set方法的,不用写@synthesize,另外现在都是arc模式,声明数组应该用strong,不用retain
解决方案五:
将arr赋值给_arr