See*_*rex 37 iphone xcode objective-c
我有点偶然发现了一个错误,你尝试从NSMutableArray中删除对象,而其他对象被添加到其他地方.为了简单起见,我不知道如何修复它.这是我正在做的事情:
我有4个定时器调用4个不同的方法,将对象添加到同一个数组.现在,当我按下某个按钮时,我需要删除阵列中的所有对象(或至少一些).所以我试图首先使所有4个计时器无效,然后用数组做我想要的工作,然后启动计时器.我认为这会有用,因为我不再使用计时器来枚举数组,但看起来它不起作用.
这里有什么建议?
dea*_*rne 110
这与你的计时器无关.因为(我假设)你的计时器都在与修改方法相同的线程上工作,所以你不需要停下来启动它们.iOS没有使用中断模型进行计时器回调,他们必须像其他任何事件一样等待轮到他们:)
你可能正在做类似的事情
for (id object in myArray)
if (someCondition)
[myArray removeObject:object];
Run Code Online (Sandbox Code Playgroud)
你不能编辑一个可变数组,所以你需要创建一个临时数组来保存你想要删除的东西
// Find the things to remove
NSMutableArray *toDelete = [NSMutableArray array];
for (id object in myArray)
if (someCondition)
[toDelete addObject:object];
// Remove them
[myArray removeObjectsInArray:toDelete];
Run Code Online (Sandbox Code Playgroud)
fer*_*tar 24
你可以这样做:
for (id object in [myArray copy])
if (someCondition)
[myArray removeObject:object];
Run Code Online (Sandbox Code Playgroud)
就像@deanWombourne所说的那样,"当你经历它时你不能编辑一个可变数组",所以我在这里做的是创建一个自动释放的原始数组副本来枚举对象,这样你就可以安全地删除任何你想要的.
更清晰,更少的锅炉代码(我认为!).
更新:删除自动释放呼叫,因为这是一个旧答案,ARC之前.
您可以使用@synchronized()指令在变异时锁定该数组:
if (someCondition) {
@synchronized(yourArray) {
[yourArray removeObject:someObject];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26620 次 |
| 最近记录: |