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