我是否通过以下方式创建多个内存泄漏:
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]];
答案 0 :(得分:5)
rule很简单:每次拨打alloc
/ new
/ copy*
/ retain
时,都必须通过调用{{}来平衡它1}} / auto-
,否则你会发生内存泄漏。在代码示例中,您将release
发送到alloc
四次,但没有相应的版本,因此四个NSNumber
将泄漏。
NSNumber
不是numberWithInt:
,new
,alloc
,并且不以retain
开头,所以不需要与致电copy
/ auto-
。
您可以使用一些不同的工具find memory leaks,例如Instruments。
答案 1 :(得分: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
的调用。