0

次の方法で複数のメモリ リークを作成しますか?

NSMutableArray *array=[[NSMutableArray alloc] init];
[array addObject:[[NSNumber alloc] initWithBool:boolVariable1]];
[array addObject:[[NSNumber alloc] initWithBool:boolVariable2]];
[array addObject:[[NSNumber alloc] initWithInt:intVariable]];
[array addObject:[[NSNumber alloc] initWithFloat:floatVariable]];
[array writeToFile:[self dataFilePath] atomically:YES];
[array release];

使用する方が良いですか:

[array addObject:[NSNumber numberWithInt:intVariable]];
4

2 に答える 2

5

ルールallocは単純です: / new/ copy*/を呼び出すたびに、/retainの呼び出しとバランスを取る必要があります。そうしないと、メモリ リークが発生します。コード サンプルでは、​​4 回に送信しますが、対応するリリースがないため、4 つの s がリークします。auto-releaseallocNSNumberNSNumber

numberWithInt:ではなくnew、、allocretain始まらないため、 /copyへの呼び出しとバランスをとる必要はありません。auto-release

また、 Instrumentsなど、メモリ リークを検出するために使用できるツールもいくつかあります。

于 2010-11-18T17:18:51.570 に答える
2

への呼びかけ

[NSNumber numberWithInt:intVariable]

概念的には

[[[NSNumber alloc] initWithInt:intVariable] autorelease]

はい、あなたが与えた例では、使用する方が簡単-numberWithInt:です。

NSMutableArray *array=[[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithBool:boolVariable1]];
[array addObject:[NSNumber numberWithWithBool:boolVariable2]];
[array addObject:[NSNumber numberWithInt:intVariable]];
[array addObject:[NSNumber numberWithFloat:floatVariable]];
[array writeToFile:[self dataFilePath] atomically:YES];
[array release];

-autoreleaseそれ以外の場合は、配列に渡される各引数に呼び出しを追加する必要があります。

于 2010-11-18T17:35:42.403 に答える