内存没有被释放

时间:2012-12-11 10:56:27

标签: objective-c cocoa memory-management memory-leaks nsmutablearray

当我运行以下程序时...应用程序即使在释放所有对象后仍保留约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%

所以看起来虽然对象被释放了......它仍然是app内存作为未使用的空间......不知道在这种情况下可以做些什么。我不确定这是一个碎片问题......还是行为。

0 个答案:

没有答案