我有一个按钮,它将 Core Data SQLite 中的选定条目标记为“收藏夹”,这意味着我只是BOOL
将该索引的一个从关闭翻转到打开。
目前,当我这样做时,我会调用,save
根据managedObjectContext
Instruments 的说法,这可能需要 500 毫秒,甚至更多。
我有一些同时执行的代码会触发一个漂亮的小粒子爆炸(“万岁,最喜欢的!”),但我遇到了一个问题,即爆炸被延迟到save
完成之后。
我不知道为什么,因为触发爆炸的代码在save
调用之前。我是一个相对较新的程序员,所以也许我遗漏了一些东西,但是在这种情况下,代码不会逐行执行,因为会触发爆炸,然后保存会在进行时发生?这里的委托调用也可能需要一些时间,但同样的问题也适用,如果它在这些代码行之后有什么关系呢?
编辑:我是否正确地说,在粒子出现在下一行代码之前,主线程被阻塞,这意味着 UI 无法自行更新?
这是我的代码:
// Particle animation
LikeExplosion *likeExplosionView = [[LikeExplosion alloc] initWithFrame: CGRectMake(0, 0, 320, 400)];
[likeExplosionView setUserInteractionEnabled: NO];
[self.view addSubview: likeExplosionView];
[self.view bringSubviewToFront: likeExplosionView];
[likeExplosionView decayOverTime: 1.1];
// Delegate call to reload tableview elsewhere
[self.delegate detailViewControllerDidLikeLine];
// Update current object
[_selectedLine setIsLiked: [NSNumber numberWithBool: YES]];
[_selectedLine setIsDisliked: [NSNumber numberWithBool: NO]];
// Update context
NSError *error;
if (![[[CDManager sharedManager] managedObjectContext] save:&error]) NSLog(@"Saving changes failed: %@, %@", error, [error userInfo]);
第一个问题:当我在方法中首先调用动画代码时,为什么会有延迟?
第二个问题:将save
调用放在后台线程上会解决问题吗?这样做是否安全/好主意?