Я пытаюсь понять пример из книги Kochan Obj-C 2.0. Похоже на это. В основном у нас есть стандартный метод дроби:
-(Fraction *)add:(Fraction *) f {
Fraction *result = [[Fraction alloc] init];
int resultNum, resultDenom;
resultNum = nermator *f.denominator + denominator*f.numerator;
resultDenom = denominator *f.denominator
// numerator and denominator are instance variables
[result setTo: restultNum over: resultDenom]; // another method that sets the fraction (e.g. 1/4)
[result reduce];
return result}
Есть два примера использования этого, которые я не понимаю, один в тестовом файле main.m, который они делают:
Fraction *aFraction = [[Fraction alloc] init];
Fraction *bFraction = [[Fraction alloc] init];
Fraction *resultFraction;
[aFraction setTo: 1 over: 4];
[bFraction setTo: 1 over: 2];
resultFraction = [aFraction add: bFraction];
Я не понимаю, почему вам не нужно выделять и инициализировать resultFraction перед использованием метода add. (Вопрос № 1) Кроме того, благодаря этому, resultFraction теперь имеет счетчик ссылок 1? Или из-за того, что он никогда не выделялся и не инициализировался, счетчик ссылок по-прежнему равен 0?
Используя тот же класс дроби и методы, они показывают пример того, как вычислить суммирование 1/2 ^ n
Вот код:
Fraction *aFraction = [[Fraction alloc] init];
Fraction *sum = [[Fraction alloc] init], *sum2;
int i, n, pow2;
[sum setTo: 0 over:1]; // set 1st fraction to 0
NSLog(@"Enter n:");
scanf("%i", &n);
pow2 = 2;
for (i = 1; i <=n; ++i) {
[aFraction setTo: 1 over: pow2];
sum2 = [sum add: aFraction];
[sum release];
sum = sum2;
pow2 *=2;
}
В этом примере sum - это alloc'd и init'd, и он добавляется к aFraction, и результат присваивается sum2, затем сумма освобождается. Так как же в следующей строке (sum = sum2) сумма по-прежнему сохраняет это значение? Причина не суммируется, теперь имеет счетчик ссылок 0 после освобождения, поскольку он был инициализирован только один раз. Я думал, что sum2 будет иметь увеличенный счетчик ссылок, и его нужно будет пересчитать после того, как он будет назначен сумме.
Извините за нубские вопросы.