屬性和成員變量
成員變量:在類接口部分或類實(shí)現(xiàn)部分定義的變量,所有的成員變量起始都是實(shí)例變量,并不是真正的類變量,成員變量(實(shí)例變量)從該累的實(shí)例被創(chuàng)建開始存在,直到系統(tǒng)完全銷毀這個實(shí)例,可以將稱為實(shí)例成員變量。
@property (nonatomic, strong)UIView *myView;
屬性:我們聲明了一個屬性,蘋果在將編譯器從GCC轉(zhuǎn)成LLVM之后,就不需要我們?yōu)閷傩月暶鲗?shí)例變量。編譯器沒有匹配實(shí)例變量的屬性,將生成 _myView 的實(shí)例變量,不需要手動創(chuàng)建也不需要通過@synthesize myView給變量生成setter和getter方法。而@syntheSize就是讓編譯器生成setter和getter方法。
Category中的property
Category 只能添加方法,不能添加實(shí)例變量。但是我們會看到在Category 中添加屬性,這種情況下是不會自動生成實(shí)力變量。
在Category中添加屬性,不會自動生成實(shí)例變量,這里面添加其實(shí)是setter和getter方法的聲明,沒有方法的實(shí)現(xiàn)。
匿名類別extension(匿名擴(kuò)展)是可以添加實(shí)例變量的,非匿名類別是不能添加實(shí)例變量的,只能添加方法,或者屬性(其實(shí)也是方法),常用的擴(kuò)展是在.m文件中聲明私有屬性和方法。 Category理論上不能添加變量,但是可以使用rRuntime機(jī)制來彌補(bǔ)這種不足。
如果真的需要給category增加屬性只能通過:
①objc_setAssociatedObject
②objc_getAssociatedObject