gpt4 book ai didi

iphone - 在 iphone SQLite (FMDB) 中加载 10k+ 行

转载 作者:行者123 更新时间:2023-12-03 20:53:32 25 4
gpt4 key购买 nike

我正在创建一个字典应用程序,并尝试将术语加载到 iPhone 字典中以供使用。这些术语是从此表中定义的 ( SQLite ):

id -> INTEGER autoincrement PK 
termtext -> TEXT
langid -> INT
normalized -> TEXT

使用标准化是因为我用希腊语写作,并且我在 sqlite 引擎上没有 icu 来搜索变音符号,所以我正在制作一个 termtext 变音符号/不区分大小写。它也是主要的搜索字段,与 termtext 相比,termtext 可能是“查看”字段。

我定义了一个类(如 POJO),如下所示:

terms.h

#import <Foundation/Foundation.h>
@interface Terms : NSObject {
NSUInteger termId; // id
NSString* termText; // termtext
NSUInteger langId; // langid
NSString* normalized; // normalized
}
@property (nonatomic, copy, readwrite) NSString* termText;
@property (nonatomic, copy, readwrite) NSString* normalized;
@property (assign, readwrite) NSUInteger termId;
@property (assign, readwrite) NSUInteger langId;
@end

terms.c

#import "Terms.h"

@implementation Term
@synthesize termId;
@synthesize termText;
@synthesize langId;
@synthesize normalized;
@end

现在在我的代码中我使用 FMDB作为 SQLite 的包装数据库。我使用以下代码加载条款:

[... fmdb defined database as object, opened ]
NSMutableArray *termResults = [[[NSMutableArray alloc] init] autorelease];
FMResultSet *s = [database executeSQL:@"SELECT id, termtext, langid, normalized FROM terms ORDER BY normalized ASC"];
while ([s next]) {
Term* term = [[Terms alloc] init];
term.termId = [s intForColumn:@"id"];
[... other definitions]
[termResults addObject:term];
[term release];
}

然后将整个 termResults 加载到 UITableView (在 viewdidload 上)但每次启动应用程序时加载最多需要 5 秒。有什么办法可以加快这个过程吗?我已对 id、termText 建立索引并在 SQLite 上进行标准化.

*** 更新:添加了 cellForRowAtIndexPath ****

[.. standard cell definition...]
// Configure the cell
Term* termObj = [self.termResults objectAtIndex:indexPath.row];
cell.textLabel.text = termObj.termText;
return cell;

最佳答案

既然你似乎无论如何都将整个数据库加载到内存中(并且认为这是必须的),那么使用 SQLite 的全部意义几乎消失了。

因此,如果数据是静态(不会改变),我会将数据库转换为对象一次,然后序列化对象(实现NSCoding协议(protocol))并存储这个数组(或者更好的是字典)使用 writeToFile:atomically: 。一旦您拥有该文件(在开发过程中执行此操作),您就可以在运行时使用 arrayWithContentsOfFile: 轻松加载它。在这种情况下应该更快。

关于iphone - 在 iphone SQLite (FMDB) 中加载 10k+ 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com