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

当我们使用@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方法的一个原因)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 2,326评论 1 6
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,925评论 1 10
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,838评论 0 9
  • 今天六点就起床了,被我妈叫醒,去我外婆家。我外婆一大早打电话给我妈说邻居要挖地下室,会影响我们的房子,让我妈和我大...
    Hifly816阅读 261评论 0 0
  • 170709同恩喆一家出游 恩喆处在“十万个在哪里(是什么)”阶段,一路上不停地问这问那“挖土机在哪里”“在工地上...
    钰娇荣阅读 216评论 0 0