0

次のプログラムを実行すると...すべてのオブジェクトを解放した後でも、アプリケーションは約5MBのメモリを保持しています...リストにオブジェクトを追加しないと、すべて正常に動作します...しかし、アプリケーションがメモリを保持している理由がわかりませんリストを公開した後も。

このリンク「NSMutableArray big memory hog ?」を読みました。そして、mikeash MACollectionsによってカスタムの可変配列を試してみました-すべての場合で...オブジェクトをリストに追加しても、ループで割り当てられたメモリは決して解放されません。

コードフローで何が問題になっているのかを知るための提案を教えてください。貴重なお時間とご協力に感謝いたします。

@interface TestData : NSObject 
{
    NSString *strData;
}
@property (nonatomic,retain)NSString* strData;

@end

@implementation TestData

@synthesize strData;

- (void)dealloc
{
    self.strData = nil;
    [super dealloc];
}

@end

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSMutableArray *list = [[NSMutableArray alloc] init];
    TestData *_object = nil;
    NSString *val = nil;
    for (long i = 0; i < 100000; i++)
    {
        _object = [[TestData alloc] init];
        val = [[NSString alloc] initWithFormat:@"%lu",_object];
        _object.strData = val;
        [val release];

        [list addObject:_object];
        [_object release];
    }

    [list release];


    [pool release];

    return NSApplicationMain(argc, (const char **)argv);
}

更新:ターミナルで「vmmap」コマンドを使用しました...次のようなものが表示されます...

                                     VIRTUAL   RESIDENT      DIRTY ALLOCATION      BYTES MALLOC ZONE                             SIZE     SIZE       SIZE      COUNT  ALLOCATED  % FULL
===========                          =======  =========  =========  =========  =========  ======

DefaultMallocZone_0x100005000          37.0M      5868K      2692K     8548      1210K      3% 
DispatchContinuations_0x1000cc000      4096K   48K        48K          1         32      0% 

unnamed_zone_0x100037000  0K         0K         0K          0         0K

===========                          =======  =========  =========  =========  =========  ====== 
TOTAL                                  41.0M      5916K      2740K       8549      1210K      2%

オブジェクトは解放されているように見えます...未使用のスペースとしてまだアプリのメモリです...この場合何ができるかわかりません。それが断片化の問題かどうかはわかりません...または動作です。

4

0 に答える 0