资讯专栏INFORMATION COLUMN

@property疑难杂症

happyhuangjinjin / 3441人阅读

摘要:疑难杂症大家都知道能够根据给定的内存管理语意以及原子性和非原子性的设置自动合成对应的和方法。而由于这些不了解所带来的开发中的困惑和卡顿也尤为令人不快,笔者在写这篇博客的时候也遇到了同样的这些问题,现在查明这些疑难杂症,将其一一破解。

@property疑难杂症

@property大家都知道能够根据给定的内存管理语意以及原子性和非原子性的设置自动合成对应的setter和getter方法。但是@property具体在背后除此之外还干了什么就不一定了解了。而由于这些不了解所带来的开发中的困惑和卡顿也尤为令人不快,笔者在写这篇博客的时候也遇到了同样的这些问题,现在查明这些疑难杂症,将其一一破解。

@property的发展历程经历两个阶段,当@property语法糖刚被引入进Objc时,@property是作为生成set和get方法的语法糖而存在的,仅在.h文件中自动生成accessor的方法声明,程序员还是要写出实例变量,配合@synthesize来指出要合成存取方法的变量。第二个阶段是,@property变得更加的自动化,除生成accessor方法外,还可以直接完成以前@synthesize的功能,并且生成实例变量。

但是这引发了一些困惑,这些困惑苹果的官方文档说的也不甚清楚。

由编译器合成的实例变量的继承范围可见性是什么?

对于继承父类中声明为@protected和@private的变量而言,在子类中访问这些变量会被明确告知变量是private的,无法访问。但是对于在子类中用_iva的方式访问父类自动合成出来的实例变量,只是简单的提示变量不存在。所以对于合成出来的实例变量是没法确定其继承范围的,子类在继承父类时,只能通过访问accessor方法来访问这些实例变量。

编译器将这些实例变量合成在哪里呢?

精确的位置并没有查到,但是确定的是合成在出现@synthesize的文件,也就是.m文件中,对于在@implementation synthesize的变量和可能是作为类的私有变量声明在.m文件中了。

要注意的问题:

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

参考资料:

Objective-C: Compiler error when overriding a superclass getter and trying to access ivar

What is the visibility of @synthesized instance variables?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15759.html

相关文章

  • 那些年,前端学习之路的疑难杂症(二):delete的使用介绍

    摘要:如果你想让一个数组元素的值变为而不是删除它,可以使用给其赋值而不是使用操作符。此时数组元素是在数组中的操作符与直接释放内存只能通过解除引用来间接释放没有关系。 delete 操作符用来删除一个对象的属性 语法EDIT delete expression expression 应该是一个对象的属性引用,例如: delete object.property delete object[p...

    tainzhi 评论0 收藏0
  • [疑难杂症] Android WebView 无法打开天猫页面

    摘要:主要有会话级别的数据存储,会话结束后,相关的数据就会被清除掉。用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。解决问题经过层层分析,问题指向如何开启了。 欢迎转载,但请务必注明出处! http://ryanhoo.github.io/blog/2014/09/17/android-webview-setdomstorageenabled Andro...

    Nekron 评论0 收藏0
  • centos7 安装ELK做日志收集(elasticsearch,logstash,kibana)

    摘要:关于不用说,大家多多少少都听过,最近我搭建了一套用作收集日志,供大家参考一安装强烈建议安装去的官网安装今天是,目前最新的版本是,三个都装版本版本最好一致,否则会有各种疑难杂症其中的安装教程我在这篇文章里面已经写了,下面介绍和的安装过程下载后 关于elk不用说,大家多多少少都听过,最近我搭建了一套用作收集日志,供大家参考: 一.安装elasticsearch,logstash,kiban...

    YJNldm 评论0 收藏0
  • centos7 安装ELK做日志收集(elasticsearch,logstash,kibana)

    摘要:关于不用说,大家多多少少都听过,最近我搭建了一套用作收集日志,供大家参考一安装强烈建议安装去的官网安装今天是,目前最新的版本是,三个都装版本版本最好一致,否则会有各种疑难杂症其中的安装教程我在这篇文章里面已经写了,下面介绍和的安装过程下载后 关于elk不用说,大家多多少少都听过,最近我搭建了一套用作收集日志,供大家参考: 一.安装elasticsearch,logstash,kiban...

    SwordFly 评论0 收藏0
  • JavaScript疑难杂症系列-相等性判断

    摘要:同一类的复合类型值两个复合类型对象数组函数的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。宽松相等双等号将执行类型转换原始类型的值原始类型的数据会转换成数值类型再进行比较。 事件这块知识点虽然是老生长谈的,但对于我来说多多整理,多多感悟,温故知新,每次看看这块都有不同的收获.(在这里我不会长篇大论,只会挑重点;具体的小伙伴们自行查找)参考:https://dev...

    Flink_China 评论0 收藏0

发表评论

0条评论

happyhuangjinjin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<