0

だから私はNSzombieを取得していますそしてそれはこれを言います

-[__ NSArrayI _cfTypeID]:割り当て解除されたインスタンスに送信されたメッセージ

それが何であるかについて何か考えはありますか?NSタイプだと思っていたのですが、おそらく配列だと思います。

4

2 に答える 2

3

はい—それはある種の配列になります。単一のクラスではなく、ほとんどの基礎タイプはクラスクラスターです。したがって、配列をどのように初期化するかは、どのサブクラスが返されるかに正確に影響しNSArrayます。

正確な動作は文書化されておらず、基本的に時間の経過とともに変化することが保証されていますが、たとえば、エントリ数が特定未満の不変配列を作成した場合、システムは単一のリンクされた配列を返し、単純な線形検索として検索を実行することを決定する場合があります。しきい値を超えるものを作成すると、代わりに、検索用のある種の階層ロジックを追加する配列が作成される場合があります(または、ユーザーが配列の検索を開始した場合に適切な階層テーブルを作成するロジックが含まれている可能性があります)。

学ぶべき関連レッスン:

  • 基礎クラスをサブクラス化しようとしないでください。
  • isMemberOfClass:正しく動作することを期待しないでください。
  • isKindOfClass:基礎クラスの可変バージョンと不変バージョンを必ずしも区別できるとは限りません。

Appleは、これらのクラスを区別し、プライベートとしてフラグを立てる方法を必要としているため、アンダースコアとサフィックスが必要になります。__NSArrayI実際には、バニラ不変の配列だと思います。

于 2012-11-12T03:32:55.947 に答える
1

基本的に、これはNSArrayオブジェクトが既に割り当て解除されていることを意味します。の何かがのプライベート メソッドFoundation.frameworkにアクセスしようとしてクラッシュしました。NSArray_cfTypeID

そして、なぜオブジェクトに_cfTypeIDメソッドがあるのか​​ という質問について。のコア財団の対応物。2種類は「通行料無料橋」と互換性があります。したがって、実際にはAppleはそのメソッドを内部使用に使用しています。これについてより深く理解したい場合。http://code.google.com/p/cocotron/source/browse/Foundation/NSArray/NSArray.mにアクセスできます。これは Cocotron の NSArray の実装です。アップルの実装と同じではありませんが、それでも実装は似ています。NSArrayNSArrayCFArray

于 2012-11-12T03:41:36.937 に答える