iOS开发中@property的一些小细节

@property是iOS开发中常见属性,下面写一点在开发中遇到的一些问题和心得。适合刚开始学习iOS的朋友提升一点理解


@property的一点介绍

@property在生成类属性的同时会生成三个“东西“(实在想不出啥形容词了-_-)例如下面一行代码:
@property (nonatomic, assign) CGFloat cellHeight;

  • 成员变量 _cellHeight
  • ”获取方法“ getter方法
  • ”设置方法“ setter方法

setter和getter方法在这里就不做讲述了,这之类的说明有一大堆。在这里主要说一点自己遇到的问题。当你这个Height值不希望别人改动时,你可能会对它加个readonly属性,此时会变成这样

@property (nonatomic, assign, readonly) CGFloat cellHeight;

但是改成这样后,自定义的getter方法的_cellHeight会报错

Wrong.png

为什么会报错呢,开始一脸蒙蔽,后来各种Google后明白了,当你添加readonly属性后成员变量就不会生成,只会生成上述的getter和setter方法,此时编译器当然就不知道_cellHeight是什么了。解决办法是:在.m文件中@implementation下面自己添加成员变量让编译器识别(也可在类扩展中添加)。

{
  CGFloat _cellHeight;
}

这样就不会报错了。
其实总结出一点规律,一般出现上图中的错误都是成员变量的问题,往这方面想基本上都能解决问题。


还有一种奇葩的情况@property不会生成”成员变量“

自己在google的过程中发现还有一种情况不会生成”成员变量“。如果你自定义了 setter 和 getter 方法,编译器也不会自动生成成员变量。此时也需要自己定义一个成员变量。坑爹的Apple编译器,毁我青春 (╯‵□′)╯︵┻━┻

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

推荐阅读更多精彩内容

  • 清晨 从睡梦中醒来 遇见那欢乐的阳光 快来看 它里面充满了鸟语花香 还有勤劳人们的匆忙 是你带给了我们能量 好想、...
    晓生微言阅读 1,423评论 0 0
  • 和母亲通话,半个小时,母亲对我有多关心?最后居然问我怎么洗脸,是用热水吗? 我说:“妈,你管的也太宽了,我8岁啊…...
    用屁股思考2017阅读 3,759评论 13 3
  • 这世界上有一种人,把爱藏在密不透风的角落,卑微又执着地当着一个守望者。也许,我们很多人曾是他。今天,我想说说暗恋这...
    Kiki南渡阅读 1,813评论 0 1