我的名字在類(不是實例)進行選擇,並使用它的返回值:「執行選擇器可能會導致泄漏」的選擇,當它泄漏?
id obj = [objClass performSelector:NSSelectorFromString(methodName) withObject:p1];
的選擇創建該類的一個新實例。我需要使用返回的實例。顯然我得到了通常的performSelector可能會導致泄漏,因爲它的選擇器是未知的警告,因爲這個項目是用ARC編譯的。
如果我理解正確(from the answers here等),在這種情況下,performSelector 將導致泄漏(不糾正我,如果我錯了,那麼我可以只禁用警告,並用它做)。選擇器是這樣實現的:
+ (id) objectWithFile:(NSString*)p1
{
return [NSKeyedUnarchiver unarchiveObjectWithFile:p1];
}
什麼是我的選擇,當我不得不從字符串中使用選擇和選擇創建並返回對象的新實例?
我認爲NSInvocation但它的getReturnValue
方法要求我提供我自己分配的緩衝區,其中存儲返回值。我不確定這是否適用於ARC和類方法,或者我是否只需要__bridge_transfer
將malloc'ed返回值緩衝區轉換爲id
,這就是它的全部內容。
我不明白爲什麼你會在你的情況下泄漏。 'objectWithFile:'返回一個自動釋放對象,因爲它不是一個alloc/copy/new方法。 –
我不確定我是否理解正確。假設我返回[Object new]而不是unarchived對象,它也返回一個autorelease對象,但那會泄漏?或者,如果執行選擇器本身調用alloc,new或copy,只會發生泄漏**。 – LearnCocos2D