我有一个NSMutableArray我试图在异步调用后重新加载。第一次像这样加载:
self.sessionProcList = [NSMutableArray arrayWithArray:[result records]];
在用户进行一些交互之后,将到达相同的行以重新加载NSMutableArray。这会导致崩溃
标题文件包含:
@interface...
NSMutableArray *sessionProcList;
... }
@property (nonatomic, retain) NSMutableArray *sessionProcList;
答案 0 :(得分:1)
说你做:
NSMutableArray *a = [NSMutableArray arrayWithObject: [[NSObject alloc] init]];
NSObject *o = [a objectAtIndex: 0];
[a removeAllObjects];
[o description]; // *BOOM*
以上[通常 - 有时不会但只是巧合]崩溃,因为o
在调用description
方法时已被解除分配。
如果您对数组中的对象有引用但未保留所述引用,则在清空该数组时,可能会从您下面释放所述对象。
(nonatomic
与原子无关。)
答案 1 :(得分:0)
如果我不得不猜测,我会说那个数组中的元素是从其他地方引用的。重置数组会导致使用引用的项目崩溃。
我会在重置之前使用那些尚未发布的变量检查应用程序中是否有其他变量,属性或UI元素。
答案 2 :(得分:0)
因为arrayWithArray
是一种方便的方法,所以它会使用autorelease标志进行初始化。
你还没有提到崩溃/错误消息是什么,但我猜你的NSMutableArray在第二次迭代开始之前就已经发布了。
尝试并保留数组,无论您需要多长时间:
self.sessionProcList = [NSMutableArray arrayWithArray:[result records]];
[sessionProcList retain];
然后在完成后释放它:
[sessionProcList release];
我希望它有所帮助。 ROG