有興趣的可以在xcode中建立乙個控制台程式,把上面的**複製進去,可以看到確實是我們預期的結果。學習過objective c記憶體管理的肯定就會有疑問了,temp已經釋放了,為什麼str中還能和temp中的字串拼接那?
首先還是先看段**,眼見為實,**可以說明一切。假如你有兩個類person和animal那麼你就可以寫如下的**,來訪問你定義再array物件中的例項了:
按照我們學過的objective c記憶體管理的理論分析的話,程式會在for迴圈中,丟擲乙個不能識別的selector發向乙個例項的異常。但是你可以執行一下,程式非常的正常,沒有任何的異常。你可以用上面的策略retaincount來看下物件aman和dog的變化。之後你就很容易發現問題在**了。下面還是為一些不願動手的同志,分析一下結果吧。如果照上面所說的在nsarray後面用retaincount來獲取aman和dog的的引用計數的,你會發現這兩個例項的retaincount都變成了2,自然release之後物件還是沒有銷毀的。所以由這裡可以推測出我們向乙個容器裡面放物件的時候,物件的引用計數會自動加
下面來看下nsmutablearray的一些特徵。當你想要遍歷乙個nsmutablearray的時候,然後找到某個特殊的物件,用另外乙個物件替代這個物件的時候,**如下:
答案是只要你的程式進到了if語句裡面,下次執行for迴圈的時候程式就會崩潰,報出的錯誤是bad access,在之後的部落格裡我會和大家一塊分享下,xcode程式執行中的常見錯誤。下面就來分析下這種錯誤的原因吧。
用for(id temp in mutablearray)的時候,切記不能在for迴圈中為mutablearray新增任何東西,因為for迴圈在開始的時候,會把array中的所有資料都放到乙個stack中,stack中存著array中物件的指標。如果你改變了array中的物件,原來物件的指標就銷毀了,而stack中仍然存著這個指標,訪問的時候程式會bad access從而crash。
五 Foundation框架中常用類的介紹
nsstring temp nsstring alloc initwithstring test nslog d temp retaincount temp release nslog d temp retaincount 你猜nslog會輸出什麼,是我們想要的testnsstring麼?有興趣的可...
Foundation框架下的常用類
欄位的許可權 注 在類中宣告字段,可以為字段新增許可權 private 私有許可權 protected 保護許可權 public 公有許可權 inte ce father nsobject end father d 9 保護成員,被繼承了,仍然是保護成員 公有成員,被繼承了,仍然是公有成員 注 實際...
Foundation框架 集合
foundation框架 集合 一 nsarray和 nsmutablearray 一 nsarray不可變陣列 1 nsarray的基本介紹 nsarray是 oc中使用的陣列,是物件導向的,以物件導向的形式操縱物件,是不可變陣列。c語言陣列有乙個缺點即陣列中只能存放同種資料型別的元素。oc陣列只...