Я все еще обдумываю некоторые нюансы управления памятью в target-C и придумал следующий случай, в котором я не уверен:
+ (NSDecimalNumber*)factorial: (NSDecimalNumber *)l {
NSDecimalNumber *index = l;
NSDecimalNumber *running = [NSDecimalNumber one];
for (; [index intValue] > 1; index = [index decimalNumberBySubtracting:[NSDecimalNumber one]]) {
running = [running decimalNumberByMultiplyingBy: index];
}
return running;
}
Здесь decimalNumberByMultiplyingBy и decimalNumberBySubtracting создадут много NSDecimalNumbers, которые со временем будут автоматически освобождены, насколько я понимаю, но я волнуюсь до тех пор, пока содержащаяся программа не будет зависать в огромном количестве памяти.
Должен ли я где-нибудь вводить пул автоматического выпуска? (Если да, то где?) Это окажет заметное влияние на производительность (по сравнению с побочным эффектом использования большого количества памяти)?
Является ли автоматическое освобождение правильным механизмом для использования здесь? Стоит ли смотреть на разрыв цикла и ручное освобождение памяти, как я закончил?
Это, вероятно, вопрос n00b, но я пытаюсь понять, какие из лучших практик в этой ситуации есть.