вопрос, связанный с использованием автоматического выхода Iphone - PullRequest
0 голосов
/ 06 января 2011

Может ли кто-нибудь помочь мне, пожалуйста, поймите, как осуществляется распределение и управление памятью в следующем сценарии.я даю пример кода Psuedo, и вопрос, который меня беспокоит, приведен ниже:

interface first  
{ NSDecimalNumber *number1;  
}

implementation  
.....

-(void) dealloc {  
 [number1 release];  
 [super dealloc];  
}


=================================  
interface second  
{ NSDecimalNumber *number2;  
}  

implementation second  
.....  
- (First*) check  
{  
    First *firstObject = [[[First alloc] init] autorelease];  
    firstObject.number1 = [[NSDecimalNumber alloc] initWithInteger:0];   
                    **// do i need to autorelease number1 as well?**  
    return firstObject;  
}  

Ответы [ 2 ]

1 голос
/ 06 января 2011

Ваш код правильный как есть.Если вы автоматически освободите объект, его счетчик ссылок достигнет нуля, и он будет отменен, а затем, если позднее вы попытаетесь использовать значение, хранящееся в number1, ваше приложение будет аварийно завершено.

Единственное улучшение, которое я добавлю, этовыпуская любое существующее значение.т.е.

[number1 release];
number1 = [[NSDecimalNumber alloc] initWithInteger:0];   

Если вы этого не сделаете, предыдущий объект, назначенный number1, будет пропускать каждый раз при вызове check.

0 голосов
/ 06 января 2011

Поскольку вы используете NSDecimalNumber, вам нужно его освободить. (Как вы делаете это в dealloc.)

Хотя трудно представить содержательный пример на основе вашего примера кода (так как «номер1» фактически не используется), общее правило заключается в том, что вы несете ответственность за любой объект, который вы alloc, copy или new. Если объект требуется только в рамках функции, вы, конечно, можете автоматически выпустить его.

Есть хорошая статья в блоге на http://interfacelab.com/objective-c-memory-management-for-lazy-people/, которую я бы рекомендовал прочитать, так как она содержит хорошие примеры (включая некоторые крайние случаи) и проста для подражания.

...