此代码泄漏,性能工具归咎于此代码块上的两个泄漏。如果我评论它泄漏不会发生。任何将其固定下来的帮助都将非常感激。
泄漏:
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];
答案 0 :(得分:1)
是否要释放segmentControl?
答案 1 :(得分:1)
只要segmentControl
为nil
,当您输入代码块并在代码中的其他位置(例如dealloc
或viewDidUnload
)发布时,您就是这样做的没错。
您是否尝试过在静态分析器下运行代码(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吗?