iOSにおけるperform + @selectorによる多重引数の渡し方

iOSでは、performSelectorメソッドを使ってメソッドを呼び出すことができますが、パラメータは1つしか受け取れません。パラメータを複数渡す必要がある場合は、パラメータをオブジェクトにカプセル化する方法で実現できます。

サンプルコードを以下に示します。

- (void)methodWithMultipleParameters:(NSString *)param1 param2:(NSInteger)param2 {
NSLog(@"param1 = %@, param2 = %ld", param1, (long)param2);
}
- (void)performSelectorWithMultipleParameters {
NSString *param1 = @"Hello";
NSInteger param2 = 123;
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[self methodSignatureForSelector:@selector(methodWithMultipleParameters:param2:)]];
[invocation setTarget:self];
[invocation setSelector:@selector(methodWithMultipleParameters:param2:)];
[invocation setArgument:&param1 atIndex:2];
[invocation setArgument:&param2 atIndex:3];
[invocation invoke];
}

performSelectorWithMultipleParameters メソッドでは、まずメソッドに渡す引数 param1 と param2 を準備します。次に、NSInvocation を使ってメソッド methodWithMultipleParameters:param2: を呼び出します。メソッドのシグネチャを methodSignatureForSelector メソッドで取得し、NSInvocation オブジェクトを作成してターゲット、セレクタ、引数を設定します。最後に、invoke メソッドでメソッドを呼び出します。

「methodWithMultipleParameters:param2:」メソッドでは、受け渡されたパラメータの値を出力することができます。

関連資料:

  1. NSInvocation
  2. メソッド署名
コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds