2012-11-12 28 views
0

,所以我得到一個NSzombie,它說這個奇數類型的NSZombie

- [__ NSArrayI _cfTypeID]:消息發送到釋放實例

任何想法,那是什麼?可能是一個數組,雖然我認爲如果它是一個NS類型,它會說。

回答

1

基本上這意味着您的NSArray對象已被釋放。 Foundation.framework中的某些內容嘗試訪問您的NSArray的私有方法_cfTypeID並崩潰。

並且關於爲什麼在NSArray對象中有_cfTypeID方法的問題。 NSArray核心基金會CFArray的對應部分。兩種類型可與「免費橋」互換。 所以實際上蘋果使用這種方法用於內部使用。 如果你想深入瞭解這一點。您可以訪問http://code.google.com/p/cocotron/source/browse/Foundation/NSArray/NSArray.m,這是Cocotron的NSArray實現。這是不是與蘋果的實施相同,但仍然實現類似。

3

是的 - 這將是某種類型的數組。大多數基礎類型不是單類,而是類集羣。因此,您初始化數組的方式恰恰影響您獲得NSArray的哪個子類。

確切的行爲是未記錄的,基本保證隨着時間的推移發生變化,但是例如如果你創建了一個具有少於一定條目數的不可變數組,那麼系統可能會決定返回一個單一的鏈接數組,搜索。如果你創建了一個高於閾值的值,那麼它可能會創建一個數組,爲查找添加某種分層邏輯(或者,如果用戶開始搜索數組,則更可能包含創建合適分層表的邏輯)。

相關吸取教訓:

  • 從未嘗試繼承基礎類;
  • 不要指望isMemberOfClass:正常工作;
  • 甚至不希望isKindOfClass:必然能夠從基礎類的可變版本中分辨出不可變。

Apple需要一種方法來區分這些類,並將它們標記爲私有,因此最終得到下劃線和後綴。在實踐中,我認爲__NSArrayI是一個不變的數組。

+0

的確......它變成了一個IBOutletCollection,它似乎在dealloc方法之前失去了它的值,出於一些奇怪的原因。沒關係所有固定的,謝謝。 – Genhain