[英]iOS - resetting NSMutable Array causes crash
我有一个NSMutableArray,我正在尝试在异步调用后重新加载。 第一次加载是这样的:
self.sessionProcList = [NSMutableArray arrayWithArray:[result records]];
用户进行一些交互后,将到达同一行以重新加载NSMutableArray。 这导致崩溃
头文件具有:
@interface...
NSMutableArray *sessionProcList;
... }
@property (nonatomic, retain) NSMutableArray *sessionProcList;
说您:
NSMutableArray *a = [NSMutableArray arrayWithObject: [[NSObject alloc] init]];
NSObject *o = [a objectAtIndex: 0];
[a removeAllObjects];
[o description]; // *BOOM*
上面的内容将[通常-有时不是,但不是偶然,而是偶然地]崩溃,因为在调用description
方法时o
已被释放。
如果您对数组中的对象有一个引用,但是没有保留该引用,那么在清空数组时,该对象可能会从您的下方释放。
(并且nonatomic
与原子无关。)
如果我不得不猜测,我会说该数组中的元素是从其他地方引用的。 重置数组会导致使用引用的项目崩溃。
我将在重置应用程序之前使用尚未释放的那些变量来检查您的应用程序是否存在其他变量,属性或UI元素。
由于arrayWithArray
是一种便捷方法,因此会使用自动释放标志进行初始化。
您没有提到崩溃/错误消息是什么,但是我想您的NSMutableArray将在第二次迭代开始之前被释放。
尝试将阵列保留很长时间,无论您需要以下哪种方法:
self.sessionProcList = [NSMutableArray arrayWithArray:[result records]];
[sessionProcList retain];
完成后将其释放:
[sessionProcList release];
希望对您有所帮助。 罗格
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.