从函数返回时的内存管理

时间:2013-11-20 06:25:08

标签: objective-c memory-management

假设我有这样的功能。

-(NSData *)getData {

  NSData *myData = [[NSData alloc]init];
  return myData;
}


-(void)displayData {

    NSData *data = [self getData];

     //convert data to string

    data = [self getData];

    //Convert data to string

    data = [self getData];

    //convert data to string

    [data release];

}

这里我调用get数据三次并分配给同一个对象但只释放一次。那么这个步骤会泄漏内存吗?

2 个答案:

答案 0 :(得分:2)

因为[self release]正在编译,所以它必须是非弧项目。如果是这种情况,那么是的,您发布的代码每次调用displayData时都会泄漏两个空的NSData实例。

在弧项目中,静态分析将在每次分配之前插入版本以避免泄漏。

答案 1 :(得分:1)

你必须编写如下的getData(),你需要在getdate()中指定autorelease,否则会发生内存泄漏

-(NSData *)getData {

  NSData *myData = [[[NSData alloc]init] autorelease];
  return myData;
}


-(void)displayData 
{

    NSData *data = [[self getData] retain]; // since getdata giving you an autoreleased object 

    //before assigning new value , you have to take care of old value .
    [data release];
    data = nil;

    //convert data to string
    data = [[self getData] retain];


    [data release];
    data = nil;
   //Convert data to string

   data = [[self getData] retain];

   [data release];
   data = nil;

}