当它发生泄漏时,"performSelector可能会导致泄漏"吗?

Lea*_*s2D 6 memory-leaks objective-c automatic-ref-counting performselector

我必须在类(不是实例)上按名称执行选择器并使用其返回值:

id obj = [objClass performSelector:NSSelectorFromString(methodName) withObject:p1];
Run Code Online (Sandbox Code Playgroud)

选择器创建Class的新实例.我需要使用返回的实例.显然,我得到通常的performSelector可能会导致泄漏,因为它的选择器是未知的警告,因为这个项目是用ARC编译的.

如果我理解正确(从这里和其他人的答案),在这个实例中,performSelector 将导致泄漏(如果我错了,请纠正我,然后我可以禁用警告并完成它).选择器实现如下:

+ (id) objectWithFile:(NSString*)p1
{
    return [NSKeyedUnarchiver unarchiveObjectWithFile:p1];
}
Run Code Online (Sandbox Code Playgroud)

当我必须从字符串使用选择器并且选择器创建并返回对象的新实例时,我有什么选择?

我考虑过NSInvocation但是它的getReturnValue方法要求我提供我自己分配的缓冲区,其中存储了返回值.我不确定这是否适用于ARC和类方法,或者我是否只需要将__bridge_transfermalloc的返回值缓冲区转换为,id并且这就是它的全部内容.

Mar*_*n R 5

objectWithFile:不是"alloc,copy,init,mutableCopy和new family"的方法 ,因此是"Clang/ARC文档"意义上的"Unretained return values"方法:

返回可保留对象类型但不返回保留值的方法或函数必须确保对象在返回边界上仍然有效.
...
在最坏的情况下,这可能涉及自动释放,但调用者不得假设该值实际上在自动释放池中.

所以无论你在方法中做什么,调用者都不必释放返回的对象.

因此,我认为您的代码中没有内存泄漏.