iOS - strong 和 assign的區別


          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新手,有錯可以留言,謝謝

                 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM