@property是iOS開發(fā)中常見屬性,下面寫一點在開發(fā)中遇到的一些問題和心得。適合剛開始學習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;
}
這樣就不會報錯了。
其實總結出一點規(guī)律,一般出現(xiàn)上圖中的錯誤都是成員變量的問題,往這方面想基本上都能解決問題。
還有一種奇葩的情況@property不會生成”成員變量“
自己在google的過程中發(fā)現(xiàn)還有一種情況不會生成”成員變量“。如果你自定義了 setter 和 getter 方法,編譯器也不會自動生成成員變量。此時也需要自己定義一個成員變量。坑爹的Apple編譯器,毀我青春 (╯‵□′)╯︵┻━┻