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

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

和然后我用它在整个程序和突然它改变成不同的东西(UITouch,有时,例如)。我从来没有要求它释放。为什么这样做呢?我如何防止物体被随机改变由于内存问题?

谢谢!

有帮助吗?

解决方案

尝试保留 ARR

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

其他提示

会发生什么事,是记忆,一旦你的NSArray占据,被另一个对象所占据。这可能是任何对象,因为你触摸屏幕了很多UITouch是很常见的。

这意味着你不持有的NSArray,你应该,所以提前释放的时候。你不显示的代码声明arr,但如果你改编声明为

@property (nonatomic,retain) NSArray *arr;

和它使用合成

@synthesize arr;

,则保持通过简单地向assiging self.arr代替arr处理:

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

在可可发言,你的对象现在“拥有”该阵列。在这个类的dealloc方法,你应该[self.arr release]

你应该分配一些其他阵列self.arr,分配给self.arr对象先前将得到释放,而新的保留。

或初始化与此阵列的新Array:

arr = [[NSArray alloc] initWithArray:input];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top