我最近才转向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];
}
我的问题是:以这种方式在给定方法中创建和释放对象是否正确?这似乎可以在不修改原始分数的情况下完成工作,但这是正确的方法吗?
答案 0 :(得分:1)
这是对的。每当你'分配'一个对象时,你拥有它。在它超出范围之前(在这种情况下,方法结束),您必须放弃所有权,在这种情况下是一个版本。
答案 1 :(得分:0)
最后一行是[printingFraction release];
吗?如果您将其更改为,那么您的解决方案是正确的。当你alloc
某个对象时,你必须在某个时刻release
。