@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
会报错
为什么会报错呢,开始一脸蒙蔽,后来各种Google后明白了,当你添加readonly
属性后成员变量就不会生成,只会生成上述的getter和setter方法,此时编译器当然就不知道_cellHeight
是什么了。解决办法是:在.m
文件中@implementation
下面自己添加成员变量让编译器识别(也可在类扩展中添加)。
{
CGFloat _cellHeight;
}
这样就不会报错了。
其实总结出一点规律,一般出现上图中的错误都是成员变量的问题,往这方面想基本上都能解决问题。
还有一种奇葩的情况@property不会生成”成员变量“
自己在google的过程中发现还有一种情况不会生成”成员变量“。如果你自定义了 setter 和 getter 方法,编译器也不会自动生成成员变量。此时也需要自己定义一个成员变量。坑爹的Apple编译器,毁我青春 (╯‵□′)╯︵┻━┻
网友评论