私はARMv7 IOSデバイスで標準的な方法のスウィズリングを使用していますが、それは私にとって完璧に機能します.
しかし、arm64 用にコードをコンパイルすると、新しいメソッドから元のメソッドを呼び出すことができません。
スウィズリングの主な目的 - アプリケーションの内部メソッドのパラメーターを別のメソッドで使用すること。
元のメソッドがあり、それを変更して新しいメソッドで元のメソッドを呼び出し-(void)insertdata:(id)text
たいです。-(void)patchedCall:(id)text
コード:
static IMP sOriginalImp = NULL;
@interface TextOverrides: NSObject
+(void)load;
-(void)patchedinsert:(id)text;
@end
@implementation TextOverrides
+(void)load
{
//Get Implementation of original method
Class originalClass = NSClassFromString(@"DataViewController");
Method originalMeth = class_getInstanceMethod(originalClass, @selector(insertdata:));
//Save original method implementation
sOriginalImp = method_getImplementation(originalMeth);
// Get implementation of replacement method
Method replacementMeth = class_getInstanceMethod(NSClassFromString(@"TextOverrides"), @selector(patchedCall:));
//Replace methods
method_exchangeImplementations(originalMeth, replacementMeth);
}
-(void)patchedCall:(id)text
{
@synchronized(self){
//Call of original method that we save
sOriginalImp(self, @selector(insertdata:), text);
//Make our code for argument "text"
printf("Here is data%s\n", [text UTF8String]);
}
}
@end
arm64 アーキテクチャで元のメソッドを呼び出すと、コードが失敗します。
//Call of original method that we save
sOriginalImp(self, @selector(insertdata:), text);
armv7 と arm64 の両方で動作するようにコードを改善するにはどうすればよいですか?