【发布时间】:2011-09-02 15:07:37
【问题描述】:
我有返回类型为(NSArray/NSData/NSString/NSDictionary 等)的函数。我也可以返回和使用,但是我的问题出现@释放对象。请指导我哪种方法是管理返回对象内存的最佳方法。如果有任何问题,请忽略并给出最佳解决方案
我参考过苹果内存管理指南
一)
-(NSData *)somefunction2
{
NSData *data=[[[NSData alloc]init]autorelease];
// fill stuff for nsdata
return data;
}
-(void)somefunction
{
NSData *data=[self somefunction2];
// use data
}
但大多数博客建议避免自动释放,所以我使用以下类型
B)
-(NSData *)somefunction2
{
NSData *data=[[NSData alloc]init];
// fill stuff for nsdata
return data;
}
-(void)somefunction
{
NSData *data=[[self somefunction2] retain];
// use data
[data release];
}
C)
-(NSData *)somefunction2
{
NSData *data=[[[NSData alloc]init]autorelease];
// fill stuff for nsdata
return data;
}
-(void)somefunction
{
NSData *data=[[self somefunction2] retain];
// use data
[data release];
}
编辑: 还有一件事。如果我尝试将相同的分配对象传递给某个函数调用参数或自定义委托对象,我必须在哪里释放????无论是在函数调用下方还是在函数 def 中保留然后释放。
NSData *data=[[NSData alloc]init];
[self somfunctioncall:data];
或
NSData *data=[[NSData alloc]init];
[delegate mydelegatefunction:data];
-(void)somfunctioncall:(NSdata *)data
{
NSData *newdata =[data retain];
//data use
[data release];}
提前致谢
【问题讨论】:
-
注:前缀“get”仅用于间接返回值或对象的方法。
标签: ios memory-management memory-leaks