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