Assign主要用於修飾基本數據類型,如int、float、NSInteger、CGFloat等。存放在堆棧中的內存不需要管理,壹般不修飾對象,否則會釋放對象的內存地址,但不會釋放指針,這樣會造成野指針。
2、軟弱
弱只能用來修飾對象,但它並不持有對象,引用計數也不會是+1。該屬性在運行時運行。在被指向的內存被釋放後(引用計數為0),指針會自動=nil,這主要是為了避免循環引用。弱原理
3、強勢,挽留
Strong用來修飾壹個對象並持有它,引用計數會是+1。正常情況下,所指向的對象不會被銷毀,可以通過手動將其設置為空指針來減少引用計數。如果引用計數為0,對象將被銷毀。強弧下相當於MRC下的retain(retain對於弧的效果和強的壹樣)。
4、復制
與strong類似,如果對象不支持NSCopying協議執行copyWithZone方法,效果基本和strong壹樣,對象引用計數會是+1,不會復制新的對象。相反,copy是指引用計數為1的復制的新對象,多用於修飾可變類型的不可變對象,如NSString、NSDictionary、NSArray等。副本的深層和淺層副本的詳細說明
5、不安全_未保留
Unsafe_retain類似於weak,但是如果釋放內存,指針還是保持之前的地址,變成了野指針,訪問會崩潰,所以不安全。
摘要
1,弱後學生參考計數= 1
2.在strong學生參考計數+1 = 2之後。
3.保留後的學生參考計數+1 = 3。
4.復制後,學生引用計數+1 = 4 //不實現copyWithZone方法,否則引用計數保持3不變,但cyStu指向的對象不是學生。