1. 程式人生 > >Objective-C基礎之@synthesize, @dynamic

Objective-C基礎之@synthesize, @dynamic

not getter var 實例 利用 基礎 PE category protoc

Objective-C基礎之@synthesize, @dynamic

OC屬性用一個表達式最能清楚的解釋其實質:property = ivar + setter+getter,也就是說一個屬性是由實例變量+setter方法+getter方法組成。那麽現在編譯器幫我們做了這件事,在很早之前的版本中需要我們手動合成,那麽@synthesize property=ivar這種形式的合成。我們知道,什麽情況下編譯器不會自動給我們合成屬性:

  1. 同時實現setter、getter方法的時候,系統不會再合成ivar 和setter 、getter(當然只讀屬性,重寫getter方法)
  2. 使用@dynamic propertyname的時候
  3. protocol 中定義的屬性,不會自動合成setter、getter方法實現,只會生成聲明
  4. category 中的屬性,會生成getter setter 方法,但是並不會生成ivar,所以需要我們利用runtime objc_setAssociatedObject 和 objc_getAssociatedObject 綁定實例變量和獲取實例變量
  5. 重載的屬性不會生成

systhesize propertyname = ivarname ,並不會影響編譯器合不合成setter、只會影響合成實例變量的名字
@dynamic 會影響編譯器是否合成ivar 和getter setter方法,用詞關鍵字,該屬性將不會合成ivar 和setter getter 方法

Objective-C基礎之@synthesize, @dynamic