Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在何处发布同一类的不同方法中使用的NSArray_Ios_Objective C_Cocoa Touch - Fatal编程技术网

Ios 在何处发布同一类的不同方法中使用的NSArray

Ios 在何处发布同一类的不同方法中使用的NSArray,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,在我的iOS项目中,我正在创建一个可以包含整数值的NSArray。这个类中有几个函数在NSArray上执行它们的任务。所以我想创建NSArray作为该类的私有属性。在viewDidLoad中,我将内存分配给这个数组,即 myArray = [[NSArray alloc] init]; myArray将用于此类的几种方法中。当我分析代码时,它显示内存泄漏,因为我正在分配myArray,而没有释放它 如果我在dealloc或viewDidUnload中写入[myArray release],警告

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

myArray = [[NSArray alloc] init];
myArray
将用于此类的几种方法中。当我分析代码时,它显示内存泄漏,因为我正在分配
myArray
,而没有释放它

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

下面是我如何在课堂上宣布它的 .h文件

我想知道有什么可能的解决办法。然后使用
自动释放
。我不想公开它,所以我没有将此数组作为属性编写


提前感谢

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

在.m文件中:

@interface myClass ()

@property (nonatomic, retain) NSArray *myPrivateArray;

@end

@implementation myClass

// Class code here

@end
要释放数组,只需将属性设置为nil

self.myPrivateArray = nil;

使用另一个答案中提到的私有
@属性
,可能是最好、最干净的方法。原始实例变量并不是一种非常现代的处理方式。但是,如果您要走这条路,您可以为您的ivar实现一个getter,在该getter中,您可以释放旧的ivar并保留新的ivar:

- (void)setMyArray:(NSArray *)array {
    [myArray release];
    myArray = [array retain];
}
无论如何,这是典型的模式(这是拥有
@属性
自动为您做的事情)

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

NSArray *newArray = [[NSArray alloc] init];
[self setMyArray:newArray];
[newArray release];
这样可以防止分析器对您发出嘎嘎声。不过,有几件事让我印象深刻:

1)
[[NSArray alloc]init]
不太可能执行您希望它执行的操作。它将创建一个空的、不可变的数组。您可能想要一个NSMutableArray,或者希望使用不同的初始值设定项使用其中已有的对象对其进行实例化


2)
NSArray
s本身并不适合保存整数,而是保存对象。您可以使用
NSPointerArray
,也可以将整数放入NSNumber中,然后放入
NSArray

@属性
不会自动将变量公开。。。您可以在类内部创建一个属性作为实例变量,使其成为“private”您如何准确地声明myArray?它是该类的
@属性吗?你是在声明一个实例变量吗?我是在声明一个实例变量。你能为你的类提供代码吗?如果没有更好的上下文,很难判断发生了什么。请查找有问题的代码,我刚才补充道
NSArray *newArray = [[NSArray alloc] init];
[self setMyArray:newArray];
[newArray release];