天天看點

ios開發property詳解

property:提供成員變量的通路方法的聲明、控制成員變量的通路權限、控制多線程時成員變量的通路環境 。property不但可以在interface,在協定 protocol .和類别 category 中也可以使用。

synthesize 合成通路器方法? 實作property所聲明的方法的定義。其實說直白就像是:property聲明了一些成員變量的通路方法 ,synthesize則定義了由property聲明的方法。他們之前的對應關系是  property 聲明方法 ----------》 頭檔案中申明的方法 synthesize定義方法---------》Cpp檔案中定義的方法。

@property(attribute1 , attribute2, ...])是 property的官方表達方式,是以看到attribute1, attribute2,你就應該懂的, 他的用法不是很簡單。下面就對他的屬性清單進行分類介紹: 下面對屬性清單進行一下簡單的介紹,後續會用代碼來解釋。 1.可讀性:readonly 、readwrite @property(readwrite,....) valueType value; 這個屬性是變量的預設屬性,就是如果你(readwrite and readonly都沒有使用,那麼你的變量就是readwrite屬性),通過加入readwrite屬性你的變量就會有get方法,和set方法。 @property(readonly,...) valueType value; 這個屬性變量就是表明變量隻有可讀方法,也就是說,你隻能使用它的get方法。 2 ,assign,setter方法直接指派,不進行任何retain操作,為了解決原類型與環循引用問題 3 ,retain,setter方法對參數進行release舊值再retain新值,所有實作都是這個順序

4 ,copy,setter方法進行Copy操作,與retain處理流程一樣,先舊值release,再Copy出新的對象,retainCount為1。這是為了減少對上下文的依賴而引入的機制。

5 ,nonatomic,非原子性通路,不加同步,多線程并發通路會提高性能。 注意,如果不加此屬性,則預設是兩個通路方法都為原子型事務通路。鎖被加到所屬對象執行個體級. 是以不加nonatomic對與多線程是安全的 。 

6、 strong weak strong與weak是由ARC新引入的對象變量屬性 ARC引入了新的對象的新生命周期限定,即零弱引用。如果零弱引用指向的對象被deallocated的話,零弱引用的對象會被自動設定為nil。

@property(strong) MyClass *myObject; 相當于@property(retain) MyClass *myObject;

@property(weak) MyOtherClass *delegate; 相當于@property(assign) MyOtherClass *delegate;

強引用與弱引用的廣義差別:

    強引用也就是我們通常所講的引用,其存亡直接決定了所指對象的存亡。如果不存在指向一個對象的引用,并且此對象不再顯示清單中,則此對象會被從記憶體中釋放。

    弱引用除了不決定對象的存亡外,其他與強引用相同。即使一個對象被持有無數個若引用,隻要沒有強引用指向他,那麽其還是會被清除。沒辦法,還是 “強哥” 有面子。

簡單講strong等同retain

weak比assign多了一個功能,當對象消失後自動把指針變成nil,好處不言而喻。