我在应用程序 didFinishLaunchingWithOptions 中创建了一个非常明显的内存泄漏。
NSArray *temp = [[NSArray alloc] initWithArray:[[NSArray alloc] initWithArray:@[]]];
temp = [[NSArray alloc] initWithArray:@[]];
temp = nil;
然而,这些工具在任何时候都没有显示内存泄漏,这让我相信那里不能正常工作。还有其他人经历过吗?
我在应用程序 didFinishLaunchingWithOptions 中创建了一个非常明显的内存泄漏。
NSArray *temp = [[NSArray alloc] initWithArray:[[NSArray alloc] initWithArray:@[]]];
temp = [[NSArray alloc] initWithArray:@[]];
temp = nil;
然而,这些工具在任何时候都没有显示内存泄漏,这让我相信那里不能正常工作。还有其他人经历过吗?
根据我的观察:空的 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
. 或者,更好的是,使用您自己创建的类。
如果您使用内置类,有时会在后台进行大量优化。例如类集群,您无法确定初始化程序返回的确切类,或者在这种情况下的单例实例。