例:メソッド-myFooBarMethod:withFoo:bar:moreFoo:
があり、そのメソッドの実装内で、@"-myFooBarMethod:withFoo:bar:moreFoo:
のような名前をNSStringに動的に取得したいと思います。メソッドシグネチャのハードタイピングはありません。
これはセレクターと関係があると思います。現在のメソッド(コードを実行するメソッド)の名前をNSStringとして取得するにはどうすればよいですか?
すべてのメソッド呼び出しは、2つの隠し引数も渡します。id
という名前のself
と_cmd
という名前のSEL
です。 NSStringFromSelector
を使用して、メソッドセレクターをNSStringに変換できます。
NSStringFromSelector(_cmd);
__func__
を使用します。これはC文字列であるため、NSStringの場合は[NSString stringWithUTF8String:__func__]
を使用します。
これには、_cmd
に比べて2つの利点があります。
__func__
はC99までに存在する必要があります。)"-[MyView drawRect:]"
です。この種のものが役立つ場所の例として:これは私が使用するNSLogメッセージのテンプレートです:
NSLog(@"%@ %@: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"A Message");
これにより、ログ記録時にクラスとメソッドがコンソールにダンプされます。
Martinの回答によると、 Objective C 2.0 Runtime の情報もお読みください。
ただし、このように内臓で遊ぶと、コードの管理が難しくなる傾向があります。