2013-03-07 92 views
0

我有一個被調用多次的函數,它創建的數據通過tcp發送到服務器。我想我在某處丟失數據。NSMutableData正確的方式?

我想知道什麼是正確的方式去:在節目的開始使用finalData=[[NSMutableData alloc]init];

  1. ,而且比函數發送像(被調用很多次):

    -(NSMutableData*)setProtocolDataForString:(NSString*)data{ 
    finalData=nil; 
    //here construct new finalData.. 
    

,或者whitin的功能,其保持:

-(NSMutableData*)setProtocolDataForString:(NSString*)data{ 

finalData=[[NSMutableData data]retain]; //but its wrong because it happens many times 
//construct a finalData to send 

我沒有使用ARC。 第一路崩潰,第二路 - 我想我失去了他..

我應該使用財產?如果是的話,那麼確切的方法是什麼?

+1

硬盤從一小段代碼的說。但是,是的,當你保留某些東西時,應該在不使用時釋放它。每個保留一個(自動)釋放。我想這不是你的問題。你說這個函數被調用了很多次。可能會在早期傳輸仍在進行中時調用它?如果是這樣,那麼你不應該只分配一次'finalData'並重新使用它。分配您爲每個單獨傳輸傳輸的數據,並在傳輸完成時釋放該數據。 – 2013-03-07 09:03:12

回答

1

好吧,你要發送的數據,每次一大塊你打電話

-(NSMutableData*)setProtocolDataForString:(NSString*)data; 

你可以這樣做:

if(finalData){ 
[finalData release]; 
finalData = nil; 
} 

finalData = [[NSMutableArray alloc] init]; 
+1

發佈後無需設置nil。 – 2013-03-07 09:03:28

+1

這不完全是事實。 var可以指向垃圾數據。如果你使用'self.finalData = nil'作爲'@ property',它會釋放內存並將var指向nil。釋放後指向零是避免問題的安全方法。 – Peres 2013-03-07 09:06:50

+1

我想Anoop說的是,如果你只是要覆蓋它,沒有必要把它設置爲「nil」。 – dreamlax 2013-03-07 09:10:12