Выделение и освобождение объекта в методе в Objective-C? - PullRequest
0 голосов
/ 01 декабря 2010

Я только недавно сделал переход на Objective-C.Я делаю упражнения из Программирование Кочана в Objective-C 2.0 .В этом конкретном упражнении меня просят изменить метод печати с помощью необязательного аргумента:

-(void)print{
  NSLog(@" %i/%i ", numerator, denominator);
}

. Для этого я просто создал другой метод print, который будет принимать аргумент BOOL, и изменил существующую печать.метод следующим образом:

-(void)print{
  [self printReduced:FALSE];
}
-(void)printReduced:(BOOL)r{
  if(r){
    [self reduce];
  }
  NSLog(@" %i/%i ", numerator, denominator);
}

Но для последней части упражнения я должен использовать это BOOL, чтобы определить, следует ли уменьшить дробь или нет (нет проблем с проверкой флага), нопри уменьшении я не должен изменять исходный объект.Для этого я выделил новый объект Fraction внутри метода printReduced и выпустил его также до конца метода:

-(void)printReduced:(BOOL)r{
  Fraction *printingFraction = [[Fraction alloc] init];
  [printingFraction setTo:numerator over:denominator];
  if(r){
    [printingFraction reduce];
  }
  NSLog(@" %i/%i ",[printingFraction numerator], [printingFraction denominator]);
  [printingFraction release];
}

Мой вопрос: правильно ли создавать и освобождать объекты в рамках данного метода?сюда?Похоже, это прекрасно работает без изменения оригинальной дроби, но правильный ли это подход?

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Это правильно.Всякий раз, когда вы «выделяете» объект, вы им владеете.Прежде чем он выйдет за пределы области действия (в данном случае это конец метода), вы должны отказаться от права собственности, в данном случае - от выпуска.

0 голосов
/ 01 декабря 2010

Последняя строка должна быть [printingFraction release];? Если вы измените его на это, ваше решение будет правильным. Когда вы alloc объект, вы должны release его в какой-то момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...