iOS開發(fā)中@property的一些小細節(jié)

@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編譯器,毀我青春 (╯‵□′)╯︵┻━┻

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 清晨 從睡夢中醒來 遇見那歡樂的陽光 快來看 它里面充滿了鳥語花香 還有勤勞人們的匆忙 是你帶給了我們能量 好想、...
    曉生微言閱讀 234評論 0 0
  • 和母親通話,半個小時,母親對我有多關心?最后居然問我怎么洗臉,是用熱水嗎? 我說:“媽,你管的也太寬了,我8歲啊…...
    用屁股思考2017閱讀 678評論 13 3
  • 這世界上有一種人,把愛藏在密不透風的角落,卑微又執(zhí)著地當著一個守望者。也許,我們很多人曾是他。今天,我想說說暗戀這...
    Kiki南渡閱讀 316評論 0 1

友情鏈接更多精彩內容