1

此代码正在泄漏,性能工具将此代码块归咎于两个泄漏。如果我将其注释掉,则不会发生泄漏。任何将其固定下来的帮助将不胜感激。

泄漏:

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];
4

5 回答 5

1

只要segmentControlnil当您输入代码块并在代码中的其他位置(例如deallocor viewDidUnload)被释放时,您就没有做错任何事情。

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

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

于 2010-01-19T02:17:24.040 回答
1

segmentControl 是要被释放的吗?

于 2010-01-19T01:12:26.063 回答
0

创建数组时不需要 alloc。

NSArray *myArray = [[NSArray alloc] initWithObjects: @"Add", @"Edit", nil];

利用 :

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

试试这个方法,这个也不需要release

于 2010-01-19T02:49:52.907 回答
0

segmentControl 是一个属性吗?您在 viewDidUnload 中将其归零吗?

于 2010-01-19T02:58:45.413 回答
0

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

这可能是泄漏吗?

于 2010-01-19T01:13:15.060 回答