私にとっては、Objective-C が周囲に反応し、説明し、混乱させる能力こそが、まさにその場所です。これは、基本的なレベルで、_cmd
いつでも を参照し、現在の を取得する揺るぎない能力から始まりSEL
ます。そこから、どのNSInvocation
呪文や実行時のごまかしに参加するかは、あなた次第です。
現在、ブロック内では、呼び出し_cmd
て現在の「コンテキスト」のあいまいな説明を取得できます。つまり、
__30-[RoomController awakeFromNib]_block_invoke123RoomController
説明的?はい。 有益ですか?わかりました...しかし、あまり役に立ちません。ブロック内の動的で正確なランタイム情報、具体的には呼び出しシグネチャ、引数などを取得するにはどうすればよいですか?
ブロックの内側で獲得したい情報のタイプの良い例を提供する、事前に ブロックを「説明」するための便利な小さな方法を見つけました。
typedef void(^blockHead)(NSString*);
blockHead v = ^(NSString*sandy) { NSLog(@"damnDog",nil); };
Log([v blockDescription]);
[v blockDescription] = <NSMethodSignature: 0x7fd6fabc44d0>
number of arguments = 2
frame size = 224
is special struct return? NO
return value: -------- -------- -------- --------
type encoding (v) 'v'
flags {}
modifiers {}
frame {offset = 0, offset adjust = 0, size = 0, size adjust = 0}
memory {offset = 0, size = 0}
argument 0: -------- -------- -------- --------
type encoding (@) '@?'
flags {isObject, isBlock}
modifiers {}
frame {offset = 0, offset adjust = 0, size = 8, size adjust = 0}
memory {offset = 0, size = 8}
argument 1: -------- -------- -------- --------
type encoding (@) '@"NSString"'
flags {isObject}
modifiers {}
frame {offset = 8, offset adjust = 0, size = 8, size adjust = 0}
memory {offset = 0, size = 8}
class 'NSString'