在我的 iOS 项目中,我正在创建一个可以包含整数值的 NSArray
。这个类中有几个函数在 NSArray
上完成它们的任务。所以我想创建 NSArray
作为该类的私有(private)属性。在 viewDidLoad
中,我正在为这个数组分配内存,即
myArray = [[NSArray alloc] init];
myArray
将在此类的多个方法中使用。当我分析我的代码时,它显示内存泄漏,因为我正在分配 myArray
而不是释放它。
如果我在 dealloc
或 viewDidUnload
中编写 [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/