У меня есть функция с типом возвращаемого значения (NSArray / NSData / NSString / NSDictionary и т. Д.). я могу вернуться и использовать, но моя проблема возникает @ освободить объект. Подскажите, пожалуйста, какой из них является лучшим способом управления памятью для возвращаемого объекта. Если что-то не так, пожалуйста, проигнорируйте и предложите свое лучшее решение
Я уже упоминал руководство по управлению памятью Apple
A)
-(NSData *)somefunction2
{
NSData *data=[[[NSData alloc]init]autorelease];
// fill stuff for nsdata
return data;
}
-(void)somefunction
{
NSData *data=[self somefunction2];
// use data
}
но большинство блогов советуют избегать автоматического выпуска, поэтому я использовал следующий тип
В)
-(NSData *)somefunction2
{
NSData *data=[[NSData alloc]init];
// fill stuff for nsdata
return data;
}
-(void)somefunction
{
NSData *data=[[self somefunction2] retain];
// use data
[data release];
}
С)
-(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];
}
Edit:
Еще кое-что. если я попытаюсь передать тот же выделенный объект в некоторый вызов функции Argument или пользовательский объект Delegate, где мне нужно освободить ?? Будь ниже вызова функции или получить сохранить в функции 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];}
Заранее спасибо