Во-первых, вы должны обратиться к этому руководству по всем правилам:
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
... не принимайте то, что люди говорят здесь, как Евангелие.Существуют некоторые исключения и странные правила, которые разъяснит руководство, на которое я ссылался выше.
Теперь, относясь к вашему примеру: в общем говоря, каждый раз, когда вы alloc
что-то делаете, вы должны его выпустить.Когда вы возвращаете значение из метода, оно должно быть autoreleased
(99% времени. Есть пара исключений: видите, ничего не легко!).Apple для удобства предоставляет несколько автоматически выпущенных методов - у NSNumber
есть один из них.
Я собираюсь показать вам ваш код выше, но переписанный для использования этих автоматически выпущенных методов:
- (NSDictionary*) sampleFunction
{
NSMutableDictionary* state = [NSMutableDictionary dictionaryWithCapacity:5];
[state setObject:[NSNumber numberWithInt:self.a] forKey:@"a"];
[state setObject:[NSNumber numberWithInt:self.b] forKey:@"b"];
[state setObject:[NSNumber numberWithInt:self.c] forKey:@"c"];
return state;
}
Как я уже говорил, вы также можете использовать autorelease
с alloc/init
:
NSMutableDictionary* state = [[[NSMutableDictionary alloc] initWithCapacity:5]autorelease];
Опять же, документ Apple, на который я ссылался выше, - это best место для переходадля ответов на вопросы по управлению памятью.