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が実行されたー
となります