0

我认为内存管理有问题。我的 NSArray(称为 arr)在随机时间变成不同的东西。我不知道为什么。我有一个声明数组的 .h 文件,然后我使用初始化数组

NSString *input = [[NSString alloc] initWithData:myData encoding:NSACIIStringEncoding];
arr = [input componentsSeperatedByString:@"\n"];

然后我在整个程序中使用它,突然它变成了不同的东西(例如 UITouch,有时)。我从来没有发布过它。为什么要这样做?如何防止由于内存问题而随机更改对象?

谢谢!

4

3 回答 3

2

发生的情况是,内存一旦被您的 NSArray 占用,就会被另一个对象占用。这可能是任何对象,并且由于您经常触摸屏幕,因此 UITouch 很常见。

这意味着您不会在应该保留 NSArray 时保留它,因此它会过早释放。您没有显示代码声明arr,但如果您将 arr 声明为

@property (nonatomic,retain) NSArray *arr;

并使用合成它

@synthesize arr;

然后通过简单地分配来处理保留self.arr而不是arr

self.arr = [input componentsSeperatedByString:@"\n"];

在可可语中,您的对象现在“拥有”该数组。在dealloc这个类的方法中,你应该[self.arr release].

如果您将其他数组分配给 ,则先前self.arr分配给的对象self.arr将被释放,而新的对象将被保留。

于 2010-08-10T15:26:47.997 回答
0

尝试保留arr

arr = [[input componentsSeperatedByString:@"\n"] retain];
于 2010-08-10T15:21:26.160 回答
0

或者用这个数组初始化一个新数组:

arr = [[NSArray alloc] initWithArray:input];
于 2010-08-10T15:26:07.170 回答