我在应用程序didFinishLaunchingWithOptions中创建了一个非常明显的内存泄漏。
NSArray *temp = [[NSArray alloc] initWithArray:[[NSArray alloc] initWithArray:@[]]];
temp = [[NSArray alloc] initWithArray:@[]];
temp = nil;
然而,这些工具在任何时候都没有显示内存泄漏,这让我相信它无法正常工作。还有其他人经历过这个吗?
答案 0 :(得分:3)
根据我的观察:空的NSArray基本上是一个单例实例。您无法以这种方式创建内存泄漏,因为您的应用程序将始终引用空数组“singleton”。
这将显示所有空数组都指向相同的内存地址:
NSArray *array1 = [NSArray array];
NSArray *array2 = [NSArray arrayWithArray:array1];
NSArray *array3 = [NSArray arrayWithArray:@[]];
NSArray *array4 = @[];
NSArray *array5 = [@[] copy];
NSArray *array6 = [[NSArray alloc] initWithArray:[[NSArray alloc] initWithArray:@[]]];
NSLog(@"%p", array1);
NSLog(@"%p", array2);
NSLog(@"%p", array3);
NSLog(@"%p", array4);
NSLog(@"%p", array5);
NSLog(@"%p", array6);
无论您在应用程序生命周期的哪个位置记录空数组的地址,它都将始终相同。
您应该使用NSMutableArray
进行测试。或者,更好的是,使用您自己创建的课程。
如果您使用内置类,有时会在后台进行大量优化。例如,类集群,您无法确定初始化程序返回的确切类,或者像这种情况下的单例实例。