gpt4 book ai didi

iphone - iOS 中如何管理内存

转载 作者:行者123 更新时间:2023-12-03 19:52:19 25 4
gpt4 key购买 nike

我需要澄清内存管理概念。

我在.h中声明了一个变量

    @interface RootViewController : UIViewController
{
NSMutableArray *objMutableArray;
}
@property (nonatomic,retain) NSMutableArray *objMutableArray;

在.m文件中

    @implementation RootViewController

@synthesize objMutableArray=_objMutableArray;

- (void)viewDidload
{
[super viewDidload];

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

[self.objMutableArray addObject:@"FirstRow"];
[self.objMutableArray addObject:@"SecondRow"];
[self.objMutableArray addObject:@"ThirdRow"];
[self.objMutableArray addObject:@"FourthRow"];
[self.objMutableArray addObject:@"FifthRow"];
}

我在所有地方都使用了 self.objMutableArray 。但是当我释放该实例的内存时,我使用了 _objMutableArray。

    - (void)dealloc
{
[_objMutableArray release];
[super dealloc];
}

实际上,当我释放该实例的内存时,我感到很困惑。请告诉我我做对了,否则我必须释放“objMutableArray”对象。

最佳答案

您似乎正在使用手动内存管理而不是 ARC。这很好,但你弄错了。

please tell me i did correct or i must release "objMutableArray" object.

当然你必须释放它,因为你是使用alloc创建它的。但你的做法是不正确的。您正在泄漏内存,因为在 viewDidUnload 方法中(我想应该是 viewDidLoad ,不是吗!?)您分配给 retain 属性 - 您的对象的引用计数将为 2(一个是因为 + alloc,一个是因为 (retain))。

现在,当您在 - dealloc 中释放它时,它的引用计数仍为 1,因此您的类不会释放其所有权,从而导致内存泄漏。

解决方案:

您可以使用属性或实例变量。不要把两者混为一谈。方法#1:

_objMutableArray = [[NSMutableArray alloc] init];

// ...

[_objMutableArray release];

方法#2:

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

// ...

self.objMutableArray = nil;

关于iphone - iOS 中如何管理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17716746/

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