在我的iOS项目中,我创建的NSArray
可以包含整数值。这个类中有几个函数可以在NSArray
上执行任务。所以我想创建NSArray
作为该类的私有属性。在viewDidLoad
我正在为这个数组分配内存,即
myArray = [[NSArray alloc] init];
myArray
将用于此类的多个方法中。当我分析我的代码时,它显示内存泄漏,因为我正在分配myArray
而不是释放它。
如果我在[myArray release]
或dealloc
警告中写viewDidUnload
仍然存在。如果我在使用此数组的类的最后一个方法中释放myArray
,xCode将不允许我这样做。
以下是我如何在课堂上宣布这一点 .h文件
@interface FightVC : UIViewController
{
NSArray *myArray;
}
我想知道这可能是什么解决办法。然后使用autorelease
。我不想把它公开,所以我不是把这个数组写成属性。
提前致谢
答案 0 :(得分:2)
使用另一个答案中提到的私有@property
可能是最好,最干净的方法。原始实例变量不是一种非常现代的做事方式。但是,如果你要沿着这条路前进,你可以为你的ivar实施一个吸气剂,在那里释放旧的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
s不适合自己持有整数,它们持有对象。您可以使用NSPointerArray
,也可以将整数放入NSNumbers并将其放入NSArray
。
答案 1 :(得分:0)
要将属性设为私有,您必须创建一个匿名类别。
在您的.m文件中:
@interface myClass ()
@property (nonatomic, retain) NSArray *myPrivateArray;
@end
@implementation myClass
// Class code here
@end
要释放数组,只需将属性设置为nil。
self.myPrivateArray = nil;