0

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

myArray = [[NSArray alloc] init];

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

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

这是我在我的类 .h 文件中声明它的方式

@interface FightVC : UIViewController
{
    NSArray *myArray;
}

我想知道什么是可能的解决方案。其他然后使用autorelease. 我不想让它公开,所以我不把这个数组写成属性。

提前致谢

4

2 回答 2

2

使用@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) NSArrays 本身并不适合保存整数,它们保存对象。您可以使用 anNSPointerArray或将整数放入 NSNumbers 并将它们放入NSArray.

于 2013-03-14T06:56:42.480 回答
0

要将属性设为私有,您必须创建一个匿名类别。

在您的 .m 文件中:

@interface myClass ()

@property (nonatomic, retain) NSArray *myPrivateArray;

@end

@implementation myClass

// Class code here

@end

要释放您的数组,只需将属性设置为 nil。

self.myPrivateArray = nil;
于 2013-03-14T06:28:19.217 回答