【发布时间】:2011-04-15 10:37:11
【问题描述】:
我有一个显示 Instruments 泄漏的代码。它显示了我用arrayDetail 的内容初始化arrayDetPerformance 的泄漏
如果我释放我的arrayDetail,我的应用就会崩溃。
可能出了什么问题?
代码如下:
NSDictionary *finalResult = [extractUsers JSONValue];
// NSLog(@" Stamp-16 : %@",[NSDate date]);
NSLog(@"Array2 : %d",[arrayDetail retainCount]); //RETAIN COUNT IS 0
arrayDetail = [[finalResult objectForKey:@"Detail"]
NSLog(@"Array2 : %d",[arrayDetail retainCount]); //RETAIN COUNT IS 2
// NSLog(@"Data is : %@",array1);
// NSLog(@" Stamp-17 : %@",[NSDate date]);
//NSLog(@"Final Value is : %@",[[allUsers objectAtIndex:0] valueForKey:@"password"]);
//[self setUserData:allUsers];
//[tblView reloadData];
[responseString release];
[request release];
}
//sleep(0.3);
//[inProgressIndicator stopAnimating];
[fileContents release];
//Release all the allocated data
[json release];
//label.text = @"Finish";
// NSLog(@" Stamp-19 : %@",[NSDate date]);
NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
//NSLog(@"Array2 : %d",[array2 retainCount]);
arrayDetPerformance = [[NSMutableArray alloc] initWithArray:arrayDetail];
chartPoints= [arrayDetPerformance valueForKey:@"Points"];
NSLog(@"Chart Points: %@",chartPoints);
[def setObject:chartPoints forKey:@"yarray"];
[def setObject:@"YES" forKey:@"flagThumb"];
//array1 = [[NSMutableArray alloc] initWithObjects:@"New",@"Table",@"View",nil];
//[self.Dettable reloadData];
//sNSFileManager *fileManager = [NSFileManager defaultManager];
//[array2 release];
NSLog(@"ArrayDEtPerfomance : %d",[arrayDetPerformance retainCount]);
NSLog(@"array2 : %d",[arrayDetail retainCount]);
if([chartPoints count]>0)
{
PlotItem *plotItem = [[PlotGallery sharedPlotGallery] objectAtIndex:0];
[plotItem imageHive:Fund];
}
//[arrayDetail release];
}
内存泄漏显示在行
arrayDetPerformance = [[NSMutableArray alloc] initWithArray:arrayDetail];
我也很困惑为什么在下面的代码中保留计数直接从 0 变为 2:
NSLog(@"Array2 : %d",[arrayDetail retainCount]); //RETAIN COUNT IS 0
arrayDetail = [[finalResult objectForKey:@"Detail"]
NSLog(@"Array2 : %d",[arrayDetail retainCount]); //RETAIN COUNT IS 2
可能出了什么问题?
【问题讨论】:
-
arrayDetPerformance是如何声明的?它是财产吗? -
旁注:AFAIK 你不应该在运行时依赖 [yourObj retainCount] 值...保留计数只能在 Instruments 中有用。
-
@Nick Weaver:是的,它是一个具有属性(非原子,保留)的 NSMutableArray,并且是合成的。有什么问题?
-
您是在设置
arrayDetPerformance,就像在您的代码中显示的那样,还是实际上在使用self.arrayDetPerformance = ...? -
-retainCount 可以永远不会返回零。
标签: iphone objective-c cocoa-touch ios4 nsarray