@property
作用:快速創(chuàng)建實(shí)例變量存妊嗯肌;允許點(diǎn)語法使用
在編譯階段編譯器自動生成ivar成員變量+set方法+get方法
屬性名前加前綴_,set/get方法使用駝峰式命名
往類添加屬性础嫡,系統(tǒng)會在objc_ivar_list中添加一個成員變量的描述指么,在objc_method_list中添加set/get方法的描述
舉例:字符串var,分別對應(yīng)_var榴鼎、setVar伯诬、getVar
注意:當(dāng)類有同名成員變量,就不在重復(fù)添加
@synthesize
作用:為屬性添加一個實(shí)例變量名檬贰,或者說別名姑廉。同時會為該屬性生成 setter/getter 方法
當(dāng)我們同時重寫了setter and getter方式時,需要在.m的文件中使用@synthesize
當(dāng)在 protocol 中聲明并實(shí)現(xiàn)屬性時翁涤,需要使用@synthesize生成setter和getter
如果 @synthesize和 @dynamic都沒寫桥言,那么默認(rèn)的就是@syntheszie var = _var
@syntheszie var = _var萌踱;等價于 @syntheszie var;
@dynamic
屬性的 setter 與 getter 方法由用戶自己實(shí)現(xiàn)号阿,不自動生成并鸵。當(dāng)然對于 readonly 的屬性只需提供 getter 即可
@synchornized(obj)
obj作為鎖對象,底層通過哈希表實(shí)現(xiàn)扔涧,鎖異常會自動解鎖园担,犧牲性能換來代碼的簡潔