我有一个不保留/释放其对象的CFDictionaryRef。当我在其中添加一个项目时,我会保留它,然后再保留:
NSMutableArray *array = (__bridge_transfer NSMutableArray *)CFDictionaryGetValue(...)
[self performSelector:someSelector withObject:array];
someSelector
是一个持有我知道的选择器的变量。现在,第二行让Xcode告诉臭名昭着的警告:
PerformSelector可能会因为其选择器未知而导致泄漏
这是否意味着我应该担心ARC不知道如何管理我刚刚转让所有权的array
变量的内存?
答案 0 :(得分:0)
从评论到this question的接受答案,似乎Apple的某个人已经证实了这个假设(引用答案本身):
事实上,有时候内存管理通过特定约定与方法名称相关联。具体来说,我正在考虑方便构造函数与make方法;前者按惯例返回自动释放的对象;后者是保留的对象。约定基于选择器的名称,因此如果编译器不知道选择器,则它无法强制执行适当的内存管理规则。
因此,它与传递给performSelector:
调用的参数可能泄漏无关,而是与其返回值无关,而Objective-C无法知道它是否是自动释放的。这也是评论中Martin R所假设的内容。