NSArray的随机变成不同的东西!
题
我有存储器管理的问题,我认为。我的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];
不隶属于 StackOverflow