关于set、get方法的重写和点语法

当我们使用@property声明一个属性的时候系统会自动生成相对应的set和get方法,有时候我们需要对其进行重写。但是当我们全部重写set与get方法时系统会报错

关于set、get方法的重写和点语法_第1张图片
用@property声明的成员属性,相当于自动生成了setter getter方法,如果重写了set和get方法,与@property声明的成员属性就不是一个成员属性了,是另外一个实例变量,而这个实例变量需要手动声明。所以会报错误。

总结:一定要分清属性和变量的区别,不能混淆。@synthesize 声明的属性=变量。意思是,将属性的setter,getter方法,作用于这个变量。

解决方法:


关于set、get方法的重写和点语法_第2张图片
注意@synthesize声明一定要在@implementation下面

大家可以看一下如下写法有什么问题吗?理解此问题可深入理解oc的点语法


关于set、get方法的重写和点语法_第3张图片

我想可能会有人认为此处会由于self.name造成死循环,但事实是什么样子的呢?

我想有人会觉得self.name会优先调用get方法获取name的内存地址,再去赋值。但其实不是这样的,由于self.name = @“aa”;等同于[self setName:@"aa"];所以此语句并不会调用get方法,而是调用set方法,所以此写法不会造成死循环,而是会给name设置了一个默认的初始值(这也是重写get方法的一个原因)

你可能感兴趣的:(关于set、get方法的重写和点语法)