私は、別のクラスで定義された関数を呼び出すことができるかどうかを判断しようとすると、壁に頭を打ちました。残念ながら、Objective Cの私の限られた知識は私が満足のいく答えに達することを妨げました。基本的には、Caller
というクラスと、実行時にフックしたいFunctions
という別のクラスがあります。クラスFunctions
には、呼び出し側が実行時に参照するすべての関数が定義されています。 これはその全体がコードです:別のクラスからmsgを呼び出すことはできますか?
--- Caller.h -------------------
#import "Functions.h"
@interface Caller
{
int callerId;
NSMethodSignature *sig;
NSInvocation *func;
}
@property(retain) NSInvocation* func;
@end
--- Caller.m -------------------
#import "Caller.h"
@implementation Caller
@Synthesize func;
-(id)initWithFunction: (SEL)f
{
if (self)
{ Sig = [Caller instanceMethodSignatureForSelector: f];
func= [NSInvocation invocationWithMethodSignature: Sig];}
return self;
}
@end
--- Functions.h -------------------
@interface Functions
-(int)SayHello;
@end
--- Functions.m -------------------
#import "Functions.h"
@implementation
-(int)SayHello
{
NSLog(@"Hello");
return 0;
}
---------main.m-----------------
#import <Foundation/Foundation.h>
#import "Caller.h"
#import "Functions.h"
int main
{
NSAutoreleasePool * pool [[NSAutoreleasePool alloc]init];
Functions* ftn = [[Functions alloc]init];
Caller * c = [[Caller alloc]initWithFunction: @selection(SayHello)];
[c.func setTarget:c];
[c.func invoke];
[pool drain];
return 0;
}
コードがうまくコンパイルされましたが、instanceMethodSignatureForSelector
は私がFunctions
クラスからCaller
クラスの継承を行う場合には、プログラムが動作する0であるため、実行時に、それはエラーが発生しました魔法のように。しかし私の場合はFunctions
クラスはCaller
クラスから独立していなければなりません。回避策はありますか?
はあなたの援助のためにありがとうございました。非常に高く評価!できます! – user1205746