Objective c NSMutableData的方法正确吗?
我有一个函数被多次调用,它创建数据通过tcp发送到服务器。我想我在某处丢失了数据 我想知道正确的方法是什么: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
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];