次のプログラムを実行すると...すべてのオブジェクトを解放した後でも、アプリケーションは約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%
オブジェクトは解放されているように見えます...未使用のスペースとしてまだアプリのメモリです...この場合何ができるかわかりません。それが断片化の問題かどうかはわかりません...または動作です。