一、assign (ARC/MRC)
1移盆、assign在ARC和MRC中都是存在的
2币喧、assign一般用來修飾基本數(shù)據(jù)類型
3轨域、assign也可用來修飾對象,但是杀餐,對象的引用計數(shù)不會+1(與strong的區(qū)別)
4干发、assign如果用來修飾對象屬性,當對象銷毀后指針不會指向nil史翘,會出現(xiàn)野指針錯誤(與weak的區(qū)別)
5铐然、在MRC用assign來修飾代理,是為了防止循環(huán)引用恶座。
二、weak(ARC)
1沥阳、弱指針是針對對象的修飾詞 , 就是說它不能修飾基本數(shù)據(jù)類型 跨琳。
2、weak修飾的對象桐罕,引用計數(shù)不會+1脉让,即直接賦值
3、弱引用是為打破循環(huán)引用而生的
4功炮、它所指向的對象如果被銷毀 , 它會指向 nil . 而 nil 訪問什么鬼都不會報野指針錯誤 .
三溅潜、strong(ARC)
1、直接賦值薪伏,對象引用計數(shù)+1
2滚澜、功能等價于MRC里面的retain
四、copy(ARC/MRC)
1嫁怀、在 MRC 時是這樣做的 release 舊對象( 舊對象計數(shù)器 -1 ) , copy 新對象( 新對象計數(shù)器 +1 ) , 然后指向新對象 设捐。
2借浊、在 ARC 時是這么干的 copy 新對象( 新對象計數(shù)器 +1 ) , 然后指向新對象 。
五萝招、原子屬性(atomic)和非原子屬性(nonatomic)(ARC/MRC)
非原子屬性(nonatomic):
1蚂斤、不對set方法加鎖(@synchronized),互斥鎖是利用線程同步實現(xiàn)的 , 意在保證同一時間只有一個線程調用 set 方法 。
2槐沼、性能好
3曙蒸、線程不安全
原子屬性(atomic):
1、原子屬性就是對生成的 set 方法加互斥鎖 @synchronized(鎖對象)
2岗钩、需要消耗系統(tǒng)資源
3纽窟、還有 get 方法 , 要是同時 set 和 get 一起調用還是會有問題的 . 所以即使用了 atomic 修飾 還是不夠安全 .
六、readOnly(只讀)凹嘲、readWrite(讀寫)
readOnly:
1师倔、只讀屬性,意味著只合成getter方法
2周蹭、不想把暴露的屬性被別人替換趋艘,可以使用readOnly修飾
readWrite:
1、生成getter和setter方法
2凶朗、不用readOnly修飾時候瓷胧,默認為readWrite
static 關鍵字的作用
1.函數(shù)體內(nèi) static 變量的作用范圍為該函數(shù)體,不同于 auto 變量棚愤,該變量的內(nèi)存只被分配一次搓萧,
因此其值在下次調用時仍維持上次的值;
2.在模塊內(nèi)的 static 全局變量可以被模塊內(nèi)所用函數(shù)訪問宛畦,但不能被模塊外其它函數(shù)訪問瘸洛;
3.在模塊內(nèi)的 static 函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調用,這個函數(shù)的使用范圍被限制在聲明 它的模塊內(nèi)次和;
4.在類中的 static 成員變量屬于整個類所擁有反肋,對類的所有對象只有一份拷貝;
5.在類中的 static 成員函數(shù)屬于整個類所擁有踏施,這個函數(shù)不接收 this 指針石蔗,因而只能訪問類的static 成員變量。
__block和__weak修飾符的區(qū)別:
__block不管是ARC還是MRC模式下都可以使用畅形,可以修飾對象养距,還可以修飾基本數(shù)據(jù)類型。
__weak只能在ARC模式下使用日熬,也只能修飾對象(NSString)棍厌,不能修飾基本數(shù)據(jù)類型(int)。
__block對象可以在block中被重新賦值,__weak不可以定铜。
weak和strong的區(qū)別:weak和strong不同的是 當一個對象不再有strong類型的指針指向它的時候 它會被釋放 阳液,即使還有weak型指針指向它。一旦最后一個strong型指針離去 揣炕,這個對象將被釋放帘皿,所有剩余的weak型指針都將被清除。
copy與retain:
copy其實是建立了一個相同的對象畸陡,而retain不是.
copy是內(nèi)容拷貝鹰溜,retain是指針拷貝.
copy是內(nèi)容的拷貝 ,對于像NSString,的確是這樣,如果拷貝的是NSArray這時只是copy了指向array中相對應元素的指針.這便是所謂的"淺復制".
atomic是Objc使用的一種線程保護技術丁恭,基本上來講曹动,是防止在寫未完成的時候被另外一個線程讀取,造成數(shù)據(jù)錯誤牲览。而這種機制是耗費系統(tǒng)資源的墓陈,所以在iPhone這種小型設備上,如果沒有使用多線程間的通訊編程第献,那么nonatomic是一個非常好的選擇贡必。