假设我有这样的功能。
-(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数据三次并分配给同一个对象但只释放一次。那么这个步骤会泄漏内存吗?
答案 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;
}