我认为我的内存管理存在问题。我的NSArray(称为arr)在随机时间变成了不同的东西。我不知道为什么。我有一个声明数组的.h文件,然后使用
初始化数组NSString *input = [[NSString alloc] initWithData:myData encoding:NSACIIStringEncoding];
arr = [input componentsSeperatedByString:@"\n"];
然后我在整个程序中使用它,然后突然变成了不同的东西(例如UITouch,有时候)。我从来没有打电话给它。它为什么这样做?如何防止因内存问题而随意更改对象?
谢谢!
答案 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];