我必须在类(不是实例)上按名称执行选择器并使用它的返回值:
id obj = [objClass performSelector:NSSelectorFromString(methodName) withObject:p1];
选择器创建一个新的类实例。我需要使用返回的实例。显然我得到了通常的performSelector 可能会导致泄漏,因为它的选择器是未知警告,因为这个项目是用 ARC 编译的。
如果我理解正确(从这里和其他人的答案),在这种情况下 performSelector会导致泄漏(如果我错了请纠正我,然后我可以禁用警告并完成它)。选择器的实现如下:
+ (id) objectWithFile:(NSString*)p1
{
return [NSKeyedUnarchiver unarchiveObjectWithFile:p1];
}
当我必须使用字符串中的选择器并且选择器创建并返回对象的新实例时,我有哪些选择?
我考虑过 NSInvocation,但它的getReturnValue
方法要求我提供自己分配的缓冲区来存储返回值。我不确定这是否适用于 ARC 和类方法,或者我是否只需__bridge_transfer
将 malloc 的返回值缓冲区强制转换为id
,这就是它的全部内容。