什么是對象?? 類的實例化。
什么是類? 具有相同事物特征的統(tǒng)稱。
對象是面向?qū)ο缶幊痰幕緲?gòu)造單元。對象可以存儲并傳遞數(shù)據(jù)。
對象與對象之間的數(shù)據(jù)傳遞并執(zhí)行任務(wù)的過程,就叫做消息傳遞。
而runtime 就是實現(xiàn)消息傳遞的函數(shù)。
屬性是OC的一項特性,用于封裝對象中的數(shù)據(jù)。 OC對象通常把數(shù)據(jù)保存成各種實例變量,而通過存取方法來訪問對象。? ?點語法比較直觀的對對象進行存取操作。
@property? ?編譯器自動寫出一套存取方法,用來訪問給定類型中具有給定名稱的變量。
@synthesize 用來指定實例變量的名字
nonatomic? ?非原子性,不使用同步鎖。
atomic? 原子性? 缺點影響性能? ? ?舉例,當兩個線程讀寫同一屬性時,無論何時,總能看到有效的屬性值,不加鎖(即nonatomic)的情況下,一個線程設(shè)置值,另一個線程剛好讀值,那么尚未修改好的屬性值讀取出來,發(fā)生這情況,那線程讀的屬性值就不對了。? ?正常情況下也都是使用非原子性,第一考慮性能問題(同步鎖開銷太大),第二點就是一個線程連續(xù)多次讀取某個屬性值過程中,別的線程同時修改該值,即便你聲明原子性,也還是會讀到不同值。
readwrite? 讀/寫權(quán)限? ? ?
readonly? 只讀? ?可在頭文件攜程只讀,在分類中,就是在實現(xiàn)文件內(nèi)寫成可讀可寫
特質(zhì):
assign? 基本用在CGFloat 或者NSInteger? “純量類型”
strong? 擁有關(guān)系,屬性在設(shè)置新值時,保留新值,釋放舊值,然后把新值設(shè)置上去? ? 用于各種view,數(shù)組等
weak 非擁有關(guān)系,屬性設(shè)置新值時,既不保留新值,也不釋放舊值? ? ? ? 與assign 類似,在屬性所指的對象遭到摧毀時,屬性值也會清空。就是指向nil
unsafe_unretained? 此特質(zhì)語義和assign相同? ?適用于對象類型? ? 非擁有關(guān)系 unretained表示不保留? 當目標對象被摧毀時,屬性值不會清空(unsafe)? 這點和weak不一樣
copy? ?所屬關(guān)系與strong相似? ? ?然而在設(shè)置方法并不保留新值,而是將其拷貝