gpt4 book ai didi

ios - iOS 中的内存管理 - 我不知道如何释放内存

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

我正在使用 iOS 4,但有一些我不明白的内存管理问题。我将尝试简化代码:

- (void)viewDidLoad
{
NSMutableArray *buttonArray = [[NSMutableArray alloc] init];
for (int i = 0; i < [othercollection count]; i++)
{
// Push objects to button array
}

self.buttonSliderView = [[ButtonSliderView alloc] initWithButtons:
buttonArray];
[buttonArray release];
[self.view addSubview:self.buttonSliderView];
[buttonSliderView release];
}

- (void) viewDidAppear
{
if ([buttonSliderView.menuButtons count] > 0)
{
// ...
}
}

ButtonSliderView.m :
- (id)initWithButtons:(NSMutableArray *)buttonArray
{
self = [super init];
if (self)
{
menuButtons = buttonArray;
}
}

我在 viewDidAppear 的第一行有错误. menuButtons被释放。我怎样才能解决这个问题?哪个是正确的解决方案?

如果我将按钮数组声明更改为:
NSMutableArray* buttonArray = [[[NSMutableArray alloc] init] autorelease];

...并删除 release一句话,它也崩溃了。如果我删除 release句子和不要 autorelease ,它可以工作,但是存在内存泄漏。

最佳答案

问题是您省略了 setter 并直接分配 menuButtons 属性。试试这个:

-(id) initWithButtons:(NSMutableArray*)buttonArray  {
self = [super init];
if (self) {
[self setMenuButtons:buttonArray];
}
}

您没有显示 menuButtons 属性是如何声明的,但我认为它是:
@property (nonatomic, retain) NSArray* menuButtons;

每当您使用 setter 设置它时,这将自动为您保留 menuButtons。如果您的属性(property)声明如下:
@property (nonatomic, assign) NSArray* menuButtons;

那么您需要手动保留数组:
-(id) initWithButtons:(NSMutableArray*)buttonArray  {
self = [super init];
if (self) {
menuButtons = [buttonArray retain];
}
}

关于ios - iOS 中的内存管理 - 我不知道如何释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8851277/

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