0

次のシナリオで割り当てとメモリ管理がどのように行われ、処理されるかを理解してください。私は疑似コードの例を示しており、私を悩ませている質問は以下のインラインです。

interface first  
{ NSDecimalNumber *number1;  
}

implementation  
.....

-(void) dealloc {  
 [number1 release];  
 [super dealloc];  
}


=================================  
interface second  
{ NSDecimalNumber *number2;  
}  

implementation second  
.....  
- (First*) check  
{  
    First *firstObject = [[[First alloc] init] autorelease];  
    firstObject.number1 = [[NSDecimalNumber alloc] initWithInteger:0];   
                    **// do i need to autorelease number1 as well?**  
    return firstObject;  
}  
4

2 に答える 2

1

あなたのコードはそのまま正しいです。オブジェクトを自動解放すると、その参照カウントがゼロになり、割り当てが解除され、後で number1 に格納されている値を使用しようとすると、アプリがクラッシュします。

私が追加する唯一の拡張機能は、既存の値を解放することです。すなわち

[number1 release];
number1 = [[NSDecimalNumber alloc] initWithInteger:0];   

これを行わないと、以前に割り当てられたオブジェクトが呼び出されるnumber1たびにリークします。check

于 2011-01-05T21:40:45.370 に答える
-1

NSDecimalNumber を割り当てているので、解放する必要があります。(deallocでそうしているように。)

サンプル コードに基づいて意味のある例を提供することは困難ですが (「number1」は実際には使用されないため)、一般的なルールは、オブジェクトalloccopyまたはnew. オブジェクトが関数のスコープ内でのみ必要な場合は、もちろん自動解放できます。

http://interfacelab.com/objective-c-memory-management-for-lazy-people/に良いブログ記事があります。良い例 (いくつかのエッジケースを含む) を提供し、簡単に読むことができるので、読むことをお勧めします。従う。

于 2011-01-05T21:39:42.513 に答える