ここでは、私が尋ねようとしているのは、教育的、おそらくデバッグ目的のみであることを述べることで、この質問の前に説明します。NSBlockオブジェクトはどのように作成されますか?
Objective Cランタイムでブロックオブジェクトは内部的にどのように作成されますか?
さまざまなブロックタイプをすべて表すクラスの階層が表示され、NSObject
以下の階層内の最高のスーパークラスはNSBlock
です。クラスデータのダンプは、+ alloc
,+ allocWithZone:
、+ copy
および+ copyWithZone:
のメソッドを実装していることを示しています。他のどのブロックサブクラスもこれらのクラスメソッドを実装していないので、おそらく誤って、NSBlock
がブロック処理を担当すると私は信じています。
しかし、これらのメソッドは、ブロックの生存時間のどの時点でも呼び出されていないようです。私は自分自身で実装を交換し、それぞれにブレークポイントを設定しましたが、決して呼び出されることはありません。 NSObject
の実装と同様の練習をすることで、私が欲しいものを正確に得られます。
ブロックが異なる方法で実装されていると仮定しますか?誰でもこの実装の仕組みを明らかにすることができますか?私がブロックの割り当てとコピーを行うことができなくても、私は内部実装を理解したいと思います。
私は[ 'を使用することが可能であるとは思いませんNSBlock alloc] 'ブロックを作成し、呼び出されない理由を示します。 –