当我们使用@property声明一个属性的时候系统会自动生成相对应的set和get方法,有时候我们需要对其进行重写。但是当我们全部重写set与get方法时系统会报错
用@property声明的成员属性,相当于自动生成了setter getter方法,如果重写了set和get方法,与@property声明的成员属性就不是一个成员属性了,是另外一个实例变量,而这个实例变量需要手动声明。所以会报错误。总结:一定要分清属性和变量的区别,不能混淆。@synthesize 声明的属性=变量。意思是,将属性的setter,getter方法,作用于这个变量。
解决方法:
注意@synthesize声明一定要在@implementation下面大家可以看一下如下写法有什么问题吗?理解此问题可深入理解oc的点语法
我想可能会有人认为此处会由于self.name造成死循环,但事实是什么样子的呢?
我想有人会觉得self.name会优先调用get方法获取name的内存地址,再去赋值。但其实不是这样的,由于self.name = @“aa”;等同于[self setName:@"aa"];所以此语句并不会调用get方法,而是调用set方法,所以此写法不会造成死循环,而是会给name设置了一个默认的初始值(这也是重写get方法的一个原因)
网友评论