ios中的OC是一門面向對象的編輯語言,每一個對象都是類的實例,在OC中每一個對象都有一個名為isa的指針,指向該對象的類。所有NSObject是一個包含isa指針的結構體。
(1) assign 和 weak 一樣是一個弱引用;
(2) strong是強引用;
弱引用和強引用在引用的過程中最重要的是引起內存的變化,和內存管理,在setter方法賦值過程中,指針的數值會發生變化,在使用之前每一個實例的指針數字都是1,,alloc,release的時候會+1,使用過后釋放內存,進行dealloc進行-1,當-1 之后減到0以后,就執行dealloc進行釋放。舉例如下。具體的賦值代碼:
(1)- property(nonatomic, assign)NSObject * a;
- (void)setA:(int) a {
- a = a;
}
在弱引用的情況下,直接進行賦值,即原本指針的值為1,賦值以后沒有將指針的數字增大,還是1;
(2) - property(nonatomic, strong)NSObject * a;
- (void)setA:(int) a {
[_a release];
- a = [a strong];
}
在請引用的情況下,進行+1之后再賦值,使用過后-1仍然是1,返回之前的狀態,置為nil。
而assign,在使用之后也不進行-1,還是1,但是指向的東西卻沒有了,總是沒有變化,也不會指向nil,所以就會發生混亂。
之前在寫一個五子棋的小游戲的時候,就遇到這個問題,assign和strong使用錯誤,就遇到了系統顯示意外的錯誤。
例子可以訪問我的github地址:https://github.com/leroypus/-,ios新手,有錯可以留言,謝謝