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

作者: Senjougahara | 来源:发表于2016-11-25 13:58 被阅读64次

@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编译器,毁我青春 (╯‵□′)╯︵┻━┻

相关文章

网友评论

    本文标题:iOS开发中@property的一些小细节

    本文链接:https://www.haomeiwen.com/subject/anoipttx.html