gpt4 book ai didi

ios - 在哪里释放在同一类的不同方法中使用的 NSArray

转载 作者:行者123 更新时间:2023-11-28 22:37:48 25 4
gpt4 key购买 nike

在我的 iOS 项目中,我正在创建一个可以包含整数值的 NSArray。这个类中有几个函数在 NSArray 上完成它们的任务。所以我想创建 NSArray 作为该类的私有(private)属性。在 viewDidLoad 中,我正在为这个数组分配内存,即

myArray = [[NSArray alloc] init];

myArray 将在此类的多个方法中使用。当我分析我的代码时,它显示内存泄漏,因为我正在分配 myArray 而不是释放它。

如果我在 deallocviewDidUnload 中编写 [myArray release] 警告仍然存在。如果我在使用此数组的类的最后一个方法中释放 myArray,xCode 将不允许我这样做。

这是我在类里面声明的方式.h文件

@interface FightVC : UIViewController
{
NSArray *myArray;
}

我想知道有什么可能的解决方案。其他然后使用 autorelease 。我不想公开它,所以我没有将这个数组写为属性。

提前致谢

最佳答案

如另一个答案中所述,使用私有(private) @property 可能是执行此操作的最好和最干净的方法。原始实例变量并不是一种非常现代的做事方式。但是,如果您要走那条路,您可以为您的 ivar 实现一个 getter,在其中释放旧的 ivar 并保留新的 ivar:

- (void)setMyArray:(NSArray *)array {
[myArray release];
myArray = [array retain];
}

无论如何,这是典型的模式(这是 @property 自动为您做的事情)。

之后就可以创建数组,使用setter,然后释放对象:

NSArray *newArray = [[NSArray alloc] init];
[self setMyArray:newArray];
[newArray release];

这应该可以防止分析仪对您发出刺耳的声音。不过,有几件事让我印象深刻:

1) [[NSArray alloc] init] 不太可能做你想让它做的事。它将创建一个空的、不可变的数组。您可能想要一个 NSMutableArray,或者您想要使用不同的初始化程序使用其中已有的对象实例化它。

2) NSArray 本身并不适合保存整数,它们保存对象。您可以使用 NSPointerArray,也可以将整数放入 NSNumbers 并将它们放入 NSArray

关于ios - 在哪里释放在同一类的不同方法中使用的 NSArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15402486/

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