第六條 理解屬性
在平時的開發(fā)中會定義一些屬性,通常是@property去定義.在書中的第六條中詳細的講解了屬性的這一概念,
通常我們定義好了屬性就可以直接_去使用,另外有一點什么時候用_和self去使用屬性這在第七條中會說明.
然后器是當(dāng)我們寫好了一個屬性之后,事實上是OC已經(jīng)幫我們把"存取方法","獲取方法"已經(jīng)寫好了.
在詳細的說一下OC區(qū)別去Java和C++的不同之處,就是屬性.當(dāng)然我們也可以自己去寫getter和setter方法,
這樣做的話存在內(nèi)存的問題,說的簡單點就是單一個變量定義的時候,已經(jīng)給他分配好內(nèi)存的地址空間了,然后在他前面有添加了一個新的變量,這時候原來的變量的內(nèi)存空間就變成了新變量所在的地址,那么修改類定義之后就必須從新編譯,不然就會出錯,大概就是這個意思.當(dāng)然每種語言都會有處理方法,OC是利用runtime機制,用類對象那個在運行時去查找,隨著類的定義而改變.解決了這個問題.還有一種解決方法就是通過存取方法來做.這就是內(nèi)部封裝的屬性.
接下來介紹一下@synthesize和@dynamic
做過iOS開發(fā)的對于這兩個關(guān)鍵字應(yīng)該不陌生,通過@property去定義的屬性,器名稱前面會有一個_作為名字,通過@synthesize去修改名字.而@dynamic是告訴編譯器不要自動生成器存取方法和實例變量.
屬性的特性
原子性:natomic,也叫同步鎖.在iOS開發(fā)中一般使用nonatomic,因為同步鎖造成的形內(nèi)問題比較大,
讀寫權(quán)限:readwrite:自動生成getter和setter方法,用關(guān)鍵字@synthesize去修飾,readonly僅僅擁有獲取方法.
assign.strong,weak,copy,unsafe_unretained這么多特性.這些用法我就不多說了.