2015-10-20 52 views
1

我正在使用parse构建照片共享应用程序作为我的后端。现在,我要更新每张照片对象的numberOfLikes属性用户点击喜欢按钮后,使用:iOS Parse.com更新对象

[photoObject incrementKey:@"numberOfLikes"]; 
[photoObject saveInBackground]; 

我的问题是,让说,一些用户喜欢在同一时间相同的照片,将这些类似的请求在一个处理队列中? (请问Parse会一个一个地处理它们吗?)假设这张照片有0个喜欢,那么5个用户同时喜欢它,考虑到网络条件相同,保存后的最终结果是1还是5?

对不起,如果这个问题看起来很愚蠢或我的描述很混乱。我对Parse相当陌生。谢谢。

回答

1

Parse中的某些函数是原子的,incrementKey碰巧就是其中之一。保存时

https://parse.com/questions/concurrency-management-in-parse

的incrementKey方法是原子的。所以过程如下:

玩家A在奖品上调用incrementKey方法,并尝试保存(带回调函数)。 玩家B在奖品上调用incrementKey方法,并尝试保存(带有回调函数)。 无论是玩家A和玩家B的回调运行时,numberOfWins是6 剩下的玩家回调运行时,numberOfWins是7

你也可以实现某种使用这些功能锁定机制在这个问题中看到。

https://parse.com/questions/locking

大卫的解决方案是聪明的作品(incrementKey是原子)。如果GameRequest对象使用“挑战者”:0值创建,则每个挑战者可以调用incrementKey:@“挑战者”。如果保存后,挑战者的价值是1,那么他们是第一个承诺的挑战者。我特别喜欢这个解决方案,因为它也适用于N个玩家游戏。同样,您可以使用addUnique :(还原子)将用户ID添加到挑战者列表中。

最后要回答你的问题,它应该是5,因为它们是一个接一个地执行,而不是同时执行。

+1

哇谢谢你这个完美的答案!我希望我能给你更多的声誉!谢谢! –