2009-02-17 30 views
5

考慮以下ObjC代碼示例:在Objective-C中保留/釋放方法參數是一個好主意嗎?

- (void)doStuffWithString:(NSString *)someParam { 
    // Do stuff with someParam 
}

如果這個代碼是在多線程應用程序正在執行,這將是保留/釋放someParam一個好主意?具體來說,我在考慮傳入參數是多線程共享的單例對象的場景。例如,以下更安全嗎?

- (void)doStuffWithString:(NSString *)someParam { 
    [stringParam retain]; 
    // Do stuff with someParam 
    [stringParam release]; 
}

回答

11

不,這不是單個函數的工作,試圖爲參數提供線程安全性。

某處向上傳遞的對象是「doStuffWithString」參數。這是應該保證該對象在函數調用期間保持有效的代碼。

需要考慮兩件事情;

  1. 在您調用第三方或庫函數的情況下,這些函數不會爲您執行保留/釋放。
  2. 如果有param被刪除的危險,這可能發生在您致電'retain'之前甚至發生!

This thread也可能有幫助。

相關問題