iPhone内存泄漏帮助

时间:2010-01-19 01:09:48

标签: iphone objective-c memory-management memory-leaks autorelease

此代码泄漏,性能工具归咎于此代码块上的两个泄漏。如果我评论它泄漏不会发生。任何将其固定下来的帮助都将非常感激。

泄漏:

Malloc 48字节

NSCFarray 32字节

代码块:

    NSArray *myArray = [[NSArray alloc] initWithObjects: @"Add", @"Edit", nil];
    segmentControl = [[UISegmentedControl alloc] initWithItems:myArray];
    [myArray release];
    [segmentControl setSegmentedControlStyle:UISegmentedControlStyleBar];
    [segmentControl setMomentary:YES];
    [segmentControl addTarget:self action:@selector(addOrEditPressed) forControlEvents:UIControlEventValueChanged];
    UIBarButtonItem *myBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:segmentControl];
    self.navigationItem.rightBarButtonItem = myBarButtonItem;
    [myBarButtonItem release];

5 个答案:

答案 0 :(得分:1)

是否要释放segmentControl?

答案 1 :(得分:1)

只要segmentControlnil,当您输入代码块并在代码中的其他位置(例如deallocviewDidUnload)发布时,您就是这样做的没错。

您是否尝试过在静态分析器下运行代码(Xcode菜单:Build | Build& Analyze)?

在搜索泄漏时,仪器有时会产生误报。如果泄漏的内存不会随着时间的推移而累积,那么最糟糕的情况是您的程序总共泄漏了80个字节。随着时间的推移而出现的泄漏是你应该关注的。

答案 2 :(得分:0)

myArray的保留计数仍然是此部分代码之后的一个。当您将它添加到initWithItems以创建segmentControl时,它现在具有对该对象的引用。

这可能是泄密吗?

答案 3 :(得分:0)

创建阵列时不需要alloc。

  

NSArray * myArray = [[NSArray alloc] initWithObjects:@“添加”,@“编辑”,   零];

使用:

+ (id)arrayWithObjects:(id)firstObj, ...

尝试这种方式,这也不需要release

答案 4 :(得分:0)

段控制是属性吗?你在viewDidUnload吗?