2017-05-09 73 views
1

我是Objective C的新手,我非常感謝解決內存泄漏的任何幫助。我正在嘗試解決GPUImageFramework中發生的內存管理問題。存儲在NSMutable字典中的對象的潛在泄漏(GPUImageFramework)iOS 8+

在下面我收到以下消息的方法以藍色高亮:

  • 方法返回一個+1 Objective-C的對象保留計數
  • 對象泄露:分配對象未引用更高版本在此執行路徑並具有保留的計數+ 1

    -(void)setAndExecuteUniformStateCallbackAtIndex:(GLint)uniform forProgram:(GLProgram *)shaderProgram toBlock:(dispatch_block_t)uniformStateBlock; 
    { 
        [uniformStateRestorationBlocks setObject:[uniformStateBlock copy] forKey:[NSNumber numberWithInt:uniform]]; 
    
        uniformStateBlock(); 
    
    } 
    

enter image description here

我認爲存儲在NSMutable字典中的方法需要釋放到內存中。

請有人指點我在正確的方向嗎?

+0

你有ARC(自動引用計數)功能爲您的項目或者是你做手工的內存管理('release','retain')? – CRD

+0

我在GPUImageFramework中啓用了ARC。 –

回答

0

我有GPUImageFramework

中啓用ARC您可能需要啓用它爲您的項目,不只是框架,或者您需要手動處理內存管理。

子表達式[uniformStateBlock copy]以錯誤語言「+1保留計數」返回一個對象。即呼叫者「擁有」並且呼叫者必須釋放的對象。

當你的代碼插入一個對象到數組中時,數組本身也擁有所有權,即保留。它沒有而是從調用者那裏獲得所有權,它仍然擁有由copy返回的塊,並且正是這種所有權永遠不會放棄,從而導致泄漏,如錯誤所述。

如果您啓用ARC,它將處理此問題並在適當的位置釋放該塊的呼叫者所有權。

否則,當呼叫者不再需要該塊(仍然保留具有所有權的陣列)時,您可以關閉ARC並插入release呼叫。

HTH