クラス (インスタンスではない) で名前によってセレクターを実行し、その戻り値を使用する必要があります。
id obj = [objClass performSelector:NSSelectorFromString(methodName) withObject:p1];
セレクターは、クラスの新しいインスタンスを作成します。返されたインスタンスを使用する必要があります。このプロジェクトはARCでコンパイルされているため、セレクターが不明な警告であるため、通常のPerformSelectorがリークを引き起こす可能性があることは明らかです。
私が正しく理解していれば(ここの回答や他の人から)、この場合、 performSelectorがリークを引き起こします(間違っている場合は修正してください。警告を無効にして、それで完了です)。セレクターは次のように実装されます。
+ (id) objectWithFile:(NSString*)p1
{
return [NSKeyedUnarchiver unarchiveObjectWithFile:p1];
}
文字列からセレクターを使用する必要があり、セレクターがオブジェクトの新しいインスタンスを作成して返す場合のオプションは何ですか?
NSInvocation を検討しましたが、そのgetReturnValue
方法では、戻り値が格納される独自の割り当てられたバッファーを提供する必要があります。これが ARC およびクラス メソッドでも機能するかどうか、または単にmalloc さ__bridge_transfer
れた戻り値バッファーをキャストする必要があるかどうかはわかりませid
ん。それだけです。