ios属性同时重写set/get方法报错

使用property的时候,同时重写set get方法会报错,如

@interface ViewController : UIViewController

@property (nonatomic, copy) NSString *name;

@end

单独重写任意一个方法都不会报错,但是同时重写的话,会报错!

ios属性同时重写set/get方法报错_第1张图片

主要是因为当你复写了get和set方法之后@property默认生成的@synthesize就不会起作用了,这也就意味着你的类不会自动生成出来实例变量了,你就必须要自己声明实例变量,如下:

ios属性同时重写set/get方法报错_第2张图片

ios属性同时重写set/get方法报错_第3张图片

这时就不会报错了。


方式2 , 既然系统默认的@synthesize不管用了 , 我们也可以写上自己的synthesize ,  这样就可以了

ios属性同时重写set/get方法报错_第4张图片


property的本质是生成了set+get方法声明,  并不会生成对应的_name变量,  _name变量+set+get方法实现是由@synthesize合成的, 只不过现在的xcode不需要写synthesize, 会作为默认补充, 所以,看上去property = (set+get的方法声明)  + (_name + set + get方法实现). 类别中的属性只有set+get方法声明, 没有实例变量和set/get实现, 就可以证明这一点.

详细可参考 : https://blog.csdn.net/u014600626/article/details/107637195

property =  set + get方法声明; 

synthesize = 实例变量 +  set + get方法实现;

 

你可能感兴趣的:(零碎知识点)