gpt4 book ai didi

ios - 这个简短方法中的内存泄漏

转载 作者:行者123 更新时间:2023-11-28 23:13:50 25 4
gpt4 key购买 nike

Instruments 正在报告此方法中此 VC 的所有泄漏。可能是什么原因?我认为这是分配,但不知道为什么会泄漏。

- (void)loadViewContent
{
switch (self.currentView)
{
case 0:
self.title = @"Title 1";
[self.navigationItem.backBarButtonItem release]; //para evitar un memory leak
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Blood" style:UIBarButtonItemStylePlain
target:nil action:nil] autorelease];

[tableContent addObject:@"0"];
[tableContent addObject:@"1 - 49"];
[tableContent addObject:@"50 - 75"];
[tableContent addObject:@"76 - 89"];
[tableContent addObject:@"More than 89"];
break;

case 1:
self.title = @"Title 2";
[self.navigationItem.backBarButtonItem release];
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Resp. Rate" style:UIBarButtonItemStylePlain
target:nil action:nil] autorelease];

[tableContent addObject:@"0"];
[tableContent addObject:@"1 - 5"];
[tableContent addObject:@"6 - 9"];
[tableContent addObject:@"More than 29"];
[tableContent addObject:@"10 - 29"];
break;

default:
break;
}
}

enter image description here

提前致谢!

最佳答案

以下代码肯定会泄漏(假设在属性 tableContent 上复制或保留内存模型):

self.tableContent = [[NSMutableArray alloc] init];

tableContent 的setter 将释放旧值并保留/复制/分配新值。考虑如下语句:

self.tableContent = [NSMutableArray array];

这是完全有效的,因为 [NSMutableArray array] 是一个自动释放的对象。 self.tableContent 的后续使用仅在此之后起作用,因为 tableContent 的 setter 会增加保留计数以防止 tableContent 被释放。

您的代码(看起来很奇怪)应该如下所示:

self.tableContent = [[NSMutableArray alloc] init];
[self.tableContent release];

或者 - 需要使用一个自动释放的对象,一些开发者喜欢尽可能避免这种情况

self.tableContent = [[[NSMutableArray alloc] init] autorelease];

或者 - 使用一个不必要的临时变量来阐明内存管理

NSMutableArray * tempArr = [NSMutableArray alloc];
self.tableContent = tempArr;
[tempArr release];

关于ios - 这个简短方法中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7288064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com