2012-02-21 78 views
0

我在這裏指定一個對象是同一個對象的派生。這有什麼問題嗎?這是分配自動發佈的Objective C對象的正確方法嗎?

NSString *urlString =[TBXML textForElement:tempElement]; 
urlString = [urlString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]; 
urlString = [urlString stringByReplacingOccurrencesOfString:@"&" withString:@"&"]; 

回答

2

是的,沒關係。這段代碼運行之後,將有三個內存NSString對象:

  1. 通過[TBXML textForElement:tempElement]
  2. 通過[urlString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]
  3. 通過[urlString stringByReplacingOccurrencesOfString:@"&" withString:@"&"]

他們每個人創造的一個創建一個創建一個將有一個保留計數1,但會自動發佈。由於您不會保留對1或2的引用,因此您無法在之後增加保留計數,因此在run loop的當前迭代結束時,它們將自動釋放,保留計數將會變爲爲0,並且它們將被釋放。

第三個是在同一條船上,但你有一個參考,所以如果你做一些事情來增加其保留數(例如,將其分配給strong @property或將其添加到NSArrray),那麼在運行循環的這個迭代之後它可能會繼續存在。或者,如果您只是將它用作某個函數的參數(也許您稍後在NSString stringWithFormat:中使用它,則它將與其他兩個一起被釋放)。

1

沒有問題 - 那很好。

如果您編寫引用計數,那麼您需要注意引用,靜態分析器可以提供幫助。

+0

您能否詳細解釋「如果您編寫參考計數,那麼你需要注意你的引用,「 – Krishnan 2012-02-21 11:19:42

+1

'NSString * str = [[NSString alloc] initWithFormat:@」%i「,1]; \ n str = [[NSString alloc] initWithFormat:@」%我「,1];'會產生泄漏。 – justin 2012-02-21 11:33:35

+0

哦謝謝得到它 – Krishnan 2012-02-21 12:02:10

相關問題