Objective c NSMutableData的方法正确吗?

Objective c NSMutableData的方法正确吗?,objective-c,cocoa,memory-management,Objective C,Cocoa,Memory Management,我有一个函数被多次调用,它创建数据通过tcp发送到服务器。我想我在某处丢失了数据 我想知道正确的方法是什么: 使用finalData=[[NSMutableData alloc]init]在程序开始时,要发送的函数如下(被多次调用): 或者,在函数中保留它: -(NSMutableData*)setProtocolDataForString:(NSString*)data{ finalData=[[NSMutableData data]retain]; //but its wrong be

我有一个函数被多次调用,它创建数据通过tcp发送到服务器。我想我在某处丢失了数据

我想知道正确的方法是什么:

  • 使用
    finalData=[[NSMutableData alloc]init]在程序开始时,要发送的函数如下(被多次调用):

  • 或者,在函数中保留它:

     -(NSMutableData*)setProtocolDataForString:(NSString*)data{
    
    finalData=[[NSMutableData data]retain]; //but its wrong because it happens many times
    //construct a finalData to send
    
    我没有使用弧。 第一路撞车,第二路——我想我要失去他了


    我应该使用财产吗?如果是,具体的方法是什么?

    好的,每次调用时都会发送一大块数据

     -(NSMutableData*)setProtocolDataForString:(NSString*)data;
    
    你可以这样做:

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

    从这段代码很难说。但是,是的,当你保留某样东西的时候,你应该在它不被使用的时候释放它。每次保留一个(自动)释放。我想那不是你的问题。你说这个函数被调用了很多次。在先前的传输还在进行中时,是否可以调用它?如果是这样,那么您不应该只分配一次
    finalData
    ,然后重新使用它。为每次单独传输分配传输的数据,并在传输完成后释放该图片。这不完全是事实。var可以指向垃圾数据。如果是
    @属性
    如果是
    self.finalData=nil
    则会释放内存并将var指向nil。在发布后指向nil是避免问题的安全方法。我认为Anoop所说的是,如果您只是要覆盖它,则无需将其设置为
    nil
    。@dreamlax是,如果您要覆盖它。在发布后将其置为零是一个好习惯。我同意,但这里您将finalData设置为新分配的数组,不存在指针悬空的问题,不是吗?如果我错了,请纠正我。这只是一种习惯,没有别的。
    if(finalData){
     [finalData release];
     finalData = nil;
    }
    
    finalData = [[NSMutableArray alloc] init];