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

标签 ios objective-c cocoa-touch

在我的 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/

相关文章:

ios - 使用自定义字体在 CGContextRef 和 PDF 中打印 NSString

objective-c - -[NSDate timeIntervalSinceDate :] returns very small number on GCC 4. 2,但在 iOS4.3 模拟器上的 LLVM-GCC 4.2 上按预期工作

iphone - 我怎样才能使 UIDatePicker 中的所有日期都具有相同的颜色?

ios - 继承自 NSNotification

ios - React Native 中文本的图像识别

iphone - iPhone 应用程序的本地存储

objective-c - 什么时候调用 [super viewDidLoad] 和 [super viewDidUnload]?

ios - UITextField 触摸时崩溃

ios - 如何在iOS中管理单个项目副本中的多个项目?

iphone - 检查数据是否存在于 NSMutableArray 中的索引处