当我运行以下程序时......即使在释放所有对象后,应用程序仍持有大约 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%
所以看起来虽然对象被释放了......它仍然是应用程序内存作为未使用的空间......不确定在这种情况下可以做什么。我不确定这是一个碎片问题......还是行为。