在Objective-C中的方法中分配和释放对象?

时间:2010-12-01 00:45:44

标签: objective-c

我最近才转向Objective-C。我正在做Kochan's Programming in Objective-C 2.0的一些练习。在这个特定的练习中,我被要求用和可选参数修改print方法:

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

为此我只创建了另一个print方法,该方法将采用BOOL参数并修改现有的print方法,如下所示:

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

但是对于练习的最后一部分,我应该使用BOOL来确定是否应该减少分数(测试标志没有问题),但是当减少时我不应该修改原始对象。为此,我在printReduced方法中分配了一个新的Fraction对象,并在方法结束之前将其释放:

-(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 个答案:

答案 0 :(得分:1)

这是对的。每当你'分配'一个对象时,你拥有它。在它超出范围之前(在这种情况下,方法结束),您必须放弃所有权,在这种情况下是一个版本。

答案 1 :(得分:0)

最后一行是[printingFraction release];吗?如果您将其更改为,那么您的解决方案是正确的。当你alloc某个对象时,你必须在某个时刻release