有人能指出我正确的方向吗?当我把这个文件作为一个笔尖加载,并卸载它,并重新加载它时,仪器说我得到了内存泄漏。具体来说,它说我在哪里设置了compareOptions NSMutableArray,以及我调用[vc release]的地方。 CompareOptions是一个合成属性,也在dealloc中发布。 非常感谢提前。
- (void)viewDidLoad{
[super viewDidLoad];
//NSLog(@"Comparison.viewDidLoad");
self.compareOptions = [[NSMutableArray alloc] init];
self.tabs = [[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)];
//NSDictionary * currComparison = (NSDictionary*)[data objectAtIndex:0];
//NSArray * correctOptions = [currComparison objectForKey:@"correct"];
for(int i = 0; i < 3; i++)
{
UIViewController * vc = [[UIViewController alloc] initWithNibName:@"ComparisonOptions" bundle:nil];
ComparisonOptions * options = (ComparisonOptions *)vc.view;
[options setup];
options.index = i;
//options.frame = CGRectMake(355 + (306 * i), 475, options.frame.size.width, options.frame.size.height);
//[options setCorrect:[correctOptions objectAtIndex:i]];
[vc release];
[self.view addSubview:options];
[self.compareOptions addObject:options];
}
[self.view addSubview:self.tabs];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tabSelectedHandler:) name:@"tabSelected" object:nil ];
[self update:0];}
答案 0 :(得分:3)
compareOptions和tabs的属性如何?它会保留你的物品吗?
如果它确实保留,那么如果你使用setter和alloc,你将获得双重保留。
self.compareOptions = [[NSMutableArray alloc] init];
^ retains ^^^^^ retains
self.tabs = [[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)];
^ retains ^^^^^ retains
你可以改用
self.compareOptions = [NSMutableArray array];
self.tabs = [[[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)] autorelease];
UIViewController * vc = [[UIViewController alloc] initWithNibName:@"ComparisonOptions" bundle:nil];
ComparisonOptions * options = (ComparisonOptions *)vc.view;
[vc release];
[self.view addSubview:options];
vc.view(即选项)将在vc被解除分配的同时被解除分配。当你调用[vc release]时会发生这种情况。此后您无法使用选项。
将视图添加到子视图后,应该释放vc。
你应该考虑更好的班级名称。我永远不会认为ComparisonOptions是一个视图。这听起来更像是NSCaseInsensitiveSearch等。你知道,就像它是一个选项。