Objective-C中為什么不能直接添加分類?
? ? ? ? 在Objective-C中客情,當我們給一個類添加一個分類時迅细,如果在分類中定義了屬性,后來代碼中直接調用該屬性慕爬,程序會報錯窑眯,報錯的原因是因為平常當我們使用@property聲明一個屬性時,系統(tǒng)會自動給我們生成帶下劃線的成員變量及對應的setter和getter方法医窿,但是當我們在分類中聲明屬性時磅甩,系統(tǒng)并不會像平常一樣為我們生成成員變量及setter和getter方法,它只會為我們在屬性列表里添加相應的屬性姥卢,所以當我們在代碼中直接調用分類中的屬性時更胖,程序會報錯,提示找不到相應的方法隔显。
解決辦法
? ? ? 要想在分類中添加屬性却妨,我們可以采用通過運行時建立關聯引用,如下代碼括眠,通過這個方式就能順利在分類中添加屬性啦彪标。
? ? ? ? 最后對于objc_setAssociatedObject方法的參數做一個說明,該方法一共有4個參數掷豺,分別是源對象捞烟,關聯時的用來標記是哪一個屬性的key(因為你可能要添加很多屬性),關聯的對象和一個關聯策略当船,用來標記是哪一個屬性的key有三種常見的寫法题画,效果都一樣,如下:
關聯策略是一個枚舉值德频,和屬性的特性類似苍息。