当我运行以下程序时...应用程序即使在释放所有对象后仍保留约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内存作为未使用的空间......不知道在这种情况下可以做些什么。我不确定这是一个碎片问题......还是行为。