2010-12-01 12 views
0

私は最近、Objective-Cに移行しました。私はKochan's Programming in Objective-C 2.0からいくつかの練習をしています。私は単純に次のように既存の印刷方法をBOOL引数を取り、変更となる別のprintメソッドを作成した。このためObjective-Cのメソッド内のオブジェクトの割り当てと解放?

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

この特定の演習では、私は印刷と方法とオプションの引数を修正することを求めています
-(void)print{ 
    [self printReduced:FALSE]; 
} 
-(void)printReduced:(BOOL)r{ 
    if(r){ 
    [self reduce]; 
    } 
    NSLog(@" %i/%i ", numerator, denominator); 
} 

しかし、練習の最後の部分では、フラクションを減らすべきかどうかを判断するためにそのBOOLを使用することになっています(フラグをテストするのに問題はありません)。しかし、縮小しても、オブジェクト。このために私は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]; 
} 

私の質問です:それは右のこの方法を作成し、指定されたメソッドwhithinオブジェクトを解放しますか?これは、オリジナルのFractionを変更することなく、うまく動作するようですが、これは正しいアプローチですか?

答えて

1

これは正しいです。オブジェクトを「割り当てる」ときはいつでも、あなたはそれを所有しています。範囲外(この場合はメソッドの終了)になる前に、所有権を放棄しなければなりません。この場合、リリースです。

+1

あなたは 'retain'の代わりに' release'と言っていたと思います。 –

+0

@Jacob:良いキャッチが変更されました。 –

0

最後の行は[printingFraction release];であることを意味していますか?それに変更する場合、あなたの解決策は正しいです。 allocオブジェクトの場合は、ある時点でreleaseにする必要があります。

+0

です。それが私のコードにあるのですが、質問に間違って入力しましたが、細部まで注意を払ってくれてありがとう。いつも誰かがあなたのコードを細心の注意を払っていることを知っておくとよいでしょう。 –

関連する問題