iOS strong 和 assign的區別

2022-08-21 19:03:15 字數 725 閱讀 8481

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

在弱引用的情況下,直接進行賦值,即原本指標的值為1,賦值以後沒有將指標的數字增大,還是1;

(2)- property(nonatomic, strong)nsobject * a;

- (void)seta:(int) a

在請引用的情況下,進行+1之後再賦值,使用過後-1仍然是1,返回之前的狀態,置為nil。

而assign,在使用之後也不進行-1,還是1,但是指向的東西卻沒有了,總是沒有變化,也不會指向nil,所以就會發生混亂。

之前在寫乙個五子棋的小遊戲的時候,就遇到這個問題,assign和strong使用錯誤,就遇到了系統顯示意外的錯誤。

iOS strong和copy 詳細解讀

strong和copy是常用到的修飾符,那麼什麼時候用strong,什麼時候用copy,先上一段 再說 以下 直接在viewcontroller中寫 先定義兩個陣列 strong property nonatomic,strong nsarray arraystrong copy property ...

iOS strong 與weak何時使用

如果乙個物件在某段時間中反覆載入,而你又不希望每次載入都要重新alloc 的話,那就strong,strong 保證對此物件保持乙個強引用,對於這個物件,只要有1個strong引用的話,那它就不會釋放,當然多個strong同時作用於它也不會釋放。如果乙個物件在某段時間只會載入一次,並且載入之後確定不...

Boost原始碼剖析之 容器賦值 assign

相信大多數使用stl的人都是為了使用裡面的容器,使用vector list map的程式設計師對以下 可以說是非常熟悉了 vector i v i v.push back 1 i v.push back 2 i v.push back 3 i v.push back 4 i v.push back ...