NSArray随机变成了不同的东西!

时间:2010-08-10 15:17:59

标签: iphone memory nsarray uitouch

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

初始化数组
NSString *input = [[NSString alloc] initWithData:myData encoding:NSACIIStringEncoding];
arr = [input componentsSeperatedByString:@"\n"];

然后我在整个程序中使用它,然后突然变成了不同的东西(例如UITouch,有时候)。我从来没有打电话给它。它为什么这样做?如何防止因内存问题而随意更改对象?

谢谢!

3 个答案:

答案 0 :(得分: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的对象将被释放,并保留新对象。

答案 1 :(得分:0)

尝试保留 arr

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

答案 2 :(得分:0)

或使用此数组初始化一个新数组:

arr = [[NSArray alloc] initWithArray:input];