@property(nonatomic,strong)NSArray *app;
@property (參數(shù)) 類型 名字;
這里的參數(shù)主要分為三類:
讀寫屬性(readwrite/readonly)
setter語意(assign/retain/copy)
原子性atomicity(nonatomic)
assign/retain/copy 決定了以何種方式對數(shù)據(jù)成員賦予新值
atomicity的默認(rèn)值是atomic栅贴,讀取函數(shù)為原子操作熏迹。
? copy: 用于希望保持一份傳入值的拷貝,而不是值自身的情況厨剪,即把原來的對象完整的賦值到另外一地方友存,重新加載一內(nèi)存區(qū),一個地方變了不影響另一個地方的對象屡立。
? assign: 簡單的直接賦值,相當(dāng)于說兩個對象指向同個內(nèi)存區(qū)勇皇,一個地方的變了焚刺,其他的也跟著改變。
? retain:釋放舊的對象,將舊對象的值賦予輸入對象,再提高輸入對象的索引計(jì)數(shù) 為1
那上面的是什么意思呢?
Copy 其實(shí)是建立了一個相同的對象,而 retain 不是:
比如一個 NSString 對象,地址為 0×1111,內(nèi)容為@”ABC”
Copy 到另外一個 NSString 之 后,地址為 0×2222,內(nèi)容相同,新的對象 retain 為 1, 舊 有對象沒有變化
retain 到另外一個 NSString 之 后,地址相同(建立一個指針,指針拷貝),內(nèi)容當(dāng)然相 同,這個對象的 retain 值+1
assign 地址還是0x1111,內(nèi)容也還是“ABC”兄淫。
也就是說,retain 是指針拷貝,copy 是內(nèi)容拷貝。
strong捕虽,weak 用來修飾屬性。
strong 用來修飾強(qiáng)引用的屬性泄私;
@property (strong) SomeClass * aObject;
對應(yīng)原來的
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject;
weak 用來修飾弱引用的屬性;
@property (weak) SomeClass * aObject;
對應(yīng)原來的
@property (assign) SomeClass * aObject;
readonly關(guān)鍵字代表setter不會被生成捅暴, 所以它不可以和 copy/retain/assign組合使用咧纠。
在實(shí)現(xiàn)里,只需要
@synthesize mainView;
@synthesize windows;
就可代替 繁瑣的setter, getter方法, 這樣就 可讓編譯器自動生成讀寫函數(shù)
定義了property, 使用者,可以 點(diǎn)號(.) 來存取屬性了,哈哈,有點(diǎn)像C++了