2

私はメモリ管理に非常に混乱しています。

.h ファイルで宣言された変数 allNoticeArray:

@interface NoticeViewController : UITableViewController
{   
    NSMutableArray *allNoticeArray;    
}
@property (nonatomic, retain) NSMutableArray *allNoticeArray;
@end

.m ファイルで変数を割り当てて初期化します。

@implementation NoticeViewController
@synthesize allNoticeArray;
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.allNoticeArray = [[[NSMutableArray alloc] init] autorelease];
}
- (void)dealloc
{
    [super dealloc];
    /*
        ***should I release allNoticeArray here or not?***
    */
    //[allNoticeArray release];
}

dealloc 関数で allNoticeArray を解放する必要がありますか?

前もって感謝します!

4

5 に答える 5

3

ARC を使用するのではなく、メモリを手動で管理しているようです。

IOS5 を使用している場合は、プロジェクトを ARC に変換する方が簡単かもしれません。このコンテキストでは、dealloc について心配する必要はありません。

ARC を使用したくない場合は、viewDidLoad で割り当てたので、このコンテキストで解放する必要があります。また、dealloc に関するこの記事にも興味があるかもしれません。

于 2012-05-25T02:54:31.507 に答える
3

はい、オブジェクトを解放する必要があります。オブジェクトを解放する dealloc メソッドで以下を実行できます。

self.allNoticeArray = nil;

REASON: 配列を自動解放しましたが、プロパティを保持として宣言しました。したがって、オブジェクトは保持され、使用されます。そのため、オブジェクトをメモリから完全に削除するには、もう一度 release を呼び出す必要があります。ここでメモリ管理に関するすべてを学ぶことができますhttps://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

于 2012-05-25T03:30:38.900 に答える
2

ARC を使用しない場合は、dealloc でリリースを使用する必要があります。.h ファイルの保持により、保持カウントが 1 つ増えるというのは正しいことです。Alloc/Init は、保持カウントが 1 のオブジェクトを作成します。自動リリースはその保持に反論しますが、dealloc リリースは .h の保持をカウントします。

self.allNoticeArray=nil を設定します。はリリースと同じではありませんが、sElan からのリンクはすばらしいリンクです。

于 2012-05-25T03:36:04.033 に答える
2

ARC 以前のメモリ管理のルールは次のとおりです。オブジェクトを割り当て、保持、またはコピーする場合は、後で解放する必要があります。そうしないと、リークが発生します。プロパティは保持するように設定されているため、保持されている値は保持されます。dealloc でのリリースとバランスを取る必要があります。

于 2012-05-25T03:16:09.533 に答える
1

簡単な答えは「いいえ」ですが、推奨されていないことをいくつか行っています。コードでは、配列を1行で2回保持しています。以下のコードでは、1回だけ保持されます。

次のように配列を初期化する必要があります-

NSMutableArray *array = [[NSMutableArray alloc] init] autorelease];
self.allNoticeArray = array;

ARCの使用を検討することをお勧めします。これにより、IOS5ではメモリ管理が問題になりません。

于 2012-05-25T02:57:06.370 に答える