首先,要搞清楚三個概念:
1.屬性斥季。Property
2.實例變量何暮。Ivar(屬性是給成員變量默認添加了setter和getter方法。tips:如果不用@dynamic修飾的話婆赠。)
3.isa指針绵脯。在Objective-C中佳励,任何類的定義都是對象。類和類的實例(對象)沒有任何本質(zhì)上的區(qū)別蛆挫。任何對象都有isa指針赃承。但是分類沒有。
Category可以動態(tài)添加屬性悴侵,但是不能添加實例變量瞧剖。
原因:分類沒有自己的isa指針.“類最開始生成了很多基本屬性,比如IvarList可免,MethodList抓于。分類只會將自己的method attach到主類,并不會影響到主類的IvarList浇借。這就是為什么分類里面不能增加成員變量的原因”捉撮,實例變量沒有setter和getter方法。也沒有自己的isa指針妇垢。所以巾遭,就算系統(tǒng)不報錯也不能用。
runtime給Category動態(tài)添加屬性
從下圖可以看到闯估。分類添加成員變量報錯灼舍。添加屬性不報錯,但是會有警告涨薪。并且告訴我們要的去添加setter和getter方法或者用@dynamic修飾骑素。(注意:用@dynamic修飾只是告訴屬性setter和getter必須要自己聲明。只能解出警告刚夺。不能解決問題献丑。運行時會崩潰)
解決警告方法:
1.@dynamic修飾。(注意:用@dynamic修飾只是告訴屬性setter和getter必須要自己聲明光督。只能解出警告阳距。不能解決問題。運行時會崩潰)
2.runtime給Category動態(tài)添加屬性