对于每个ChatData对象,我都有一个唯一的msgid。
@interface ChatData : RLMObject
@property NSInteger msgid;
....
@end
但是,每次创建新对象时,我都必须查询所有对象并获取最后一个msgid。
RLMArray *all = [[ChatData allObjects] arraySortedByProperty:@"msgid" ascending:YES];
ChatData *last = [all lastObject];
ChatData *newData = [[ChataData alloc]init];
newData.msgid = last.msgid+1;
是否有一种有效的方法来替代此实现?
Realm没有自动递增行为,因此您需要自己进行管理。我鼓励您问一个关于数据的问题:
是否需要有连续的,连续的整数ID?
如果不是,那么唯一的字符串主键可能就足够了。然后,您可以使用类似的方法[[NSUUID UUID] UUIDString]
来生成唯一的字符串ID。这样做的好处是,即使在多线程方案中,也可以保证这些UUID或多或少是唯一的。
如果是这样,将最后一个数字始终保留在内存中可能会更有效,这样就不必在每次生成新ID时都进行查询。如果可能在多个线程中创建对象,请确保使nextPrimaryKey()
函数具有线程安全性,否则它可能会生成两次相同的数字(或更多!)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句