IMP型について調べてみる
IMP型について調べてみようかと思います。
とりあえずよくわからなかったので実装してみます。
ARCだとちょっと工夫が必要とのことでMRCで実装します。
ExampleObject.h
#import <Foundation/Foundation.h> @interface ExampleObject : NSObject -(void)exec; @end
ExampleObject.m
#import "ExampleObject.h" #import <objc/Object.h> @interface SampleClass : NSObject -(void)sampleMethod; @end @implementation SampleClass -(void)sampleMethod { NSLog(@"sampleMethodが実行されたー"); } @end @implementation ExampleObject -(void)exec { id obj = [SampleClass new]; SEL method = @selector(sampleMethod); IMP func = [obj methodForSelector:method]; func(); } @end
これを下記の通り実行すると
ExampleObject *exampleObject = [[ExampleObject alloc] init]; [exampleObject exec];
実行結果は
2015-03-22 15:50:40.383 Example[24294:641518] sampleMethodが実行されたー
となります