谈谈用SQLite和FMDB而不用Core Data
谈谈用SQLite和FMDB而不用Core Data
发布于:2014-04-22 11:22阅读数:4235
凭良心讲,我不能告诉你不去使用Core Data。它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要。 更重要的是,不
“”

来源:伯乐在线
凭良心讲,我不能告诉你不去使用Core Data。它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要。
| Mike Ash写到:就我自己而言,我不是个狂热粉丝。我发现API是笨拙的,并且框架本身对于大量的数据是极其缓慢的。 |
- -[VSDatabaseController runDatabaseBlockInTransaction:(VSDatabaseUpdateBlock)databaseBlock]
- typedef void (^VSDatabaseUpdateBlock)(FMDatabase *database);
- - (void)runDatabaseBlockInTransaction:(VSDatabaseUpdateBlock)databaseBlock {
- dispatch_async(self.serialDispatchQueue, ^{
- @autoreleasepool {
- [self beginTransaction];
- databaseBlock(self.database);
- [self endTransaction];
- }
- });
- }
- - (void)emptyTagsLookupTableForNote:(VSNote *)note {
- NSString *uniqueID = note.uniqueID;
- [self runDatabaseBlockInTransaction:^(FMDatabase *database) {
- [database executeUpdate:
- @"delete from tagsNotesLookup where noteUniqueID = ?;", uniqueID];
- }];
- }
- [self.database executeUpdate:
- @"CREATE INDEX if not exists noteUniqueIDIndex on tagsNotesLookup (noteUniqueID);"];
- -[VSDatabaseController runFetchForClass:(Class)databaseObjectClass
- fetchBlock:(VSDatabaseFetchBlock)fetchBlock
- fetchResultsBlock:(VSDatabaseFetchResultsBlock)fetchResultsBlock];
- FMResultSet *resultSet = fetchBlock(self.database);
- NSArray *fetchedObjects = [self databaseObjectsWithResultSet:resultSet
- class:databaseObjectClass];
- FMResultSet *resultSet = [self.database executeQuery:@"select uniqueID from some_table"];
- - (void)uploadNote:(VSNote *)note {
- VSNoteAPICall *apiCall = [[VSNoteAPICall alloc] initWithNote:[note detachedCopy]];
- [self enqueueAPICall:apiCall];
- }
- VSNote *cachedNote = [self.mapTable objectForKey:downloadedNote.uniqueID];
- [self.database executeUpdate:@"CREATE TABLE if not exists tags "
- "(uniqueID TEXT UNIQUE, name TEXT, deleted INTEGER, deletedModificationDate DATE);"];
- [self.database executeUpdate:@"CREATE INDEX if not exists "
- "archivedSortDateIndex on notes (archived, sortDate);"];
- [self.database executeUpdate:@"ALTER TABLE tags ADD deletedDate DATE"];
- CREATE TABLE if not exists tags
- (uniqueID TEXT UNIQUE, name TEXT, deleted INTEGER, deletedModificationDate DATE);
- CREATE INDEX if not exists tagNameIndex on tags (name);
- CREATE INDEX if not exists archivedSortDateIndex on notes (archived, sortDate);
- select distinct tagUniqueID from tagsNotesLookup where archived=0;
- sqlite> explain query plan select distinct tagUniqueID from tagsNotesLookup where archived=0;
- 0|0|0|SCAN TABLE tagsNotesLookup USING INDEX tagUniqueIDIndex (~100000 rows)
- CREATE INDEX archivedTagUniqueID on tagsNotesLookup(archived, tagUniqueID);
- sqlite> explain query plan select distinct tagUniqueID from tagsNotesLookup where archived=0;
- 0|0|0|SEARCH TABLE tagsNotesLookup USING COVERING INDEX archivedTagUniqueID (archived=?) (~10 rows)
- select displayName, key from items where UTTypeConformsTo(uti, ?) order by 2;
CocoaChina是全球最大的苹果开发中文社区,官方微信每日定时推送各种精彩的研发教程资源和工具,介绍app推广营销经验,最新企业招聘和外包信息,以及Cocos2d引擎、Cocos Studio开发工具包的最新动态及培训信息。关注微信可以第一时间了解最新产品和服务动态,微信在手,天下我有!
请搜索微信号“CocoaChina”关注我们!
谈谈用SQLite和FMDB而不用Core Data的更多相关文章
- 我为什么用 SQLite 和 FMDB 而不用 Core Data
凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...
- 用 SQLite 和 FMDB 替代 Core Data
本文转载至 http://blog.csdn.net/majiakun1/article/details/38680147 为什么我不使用Core Data Mike Ash 写到: 就个人而言,我不 ...
- SQLite与FMDB使用中区别
前几篇已经写完了SQLite与FMDB的基本内容以及衍生出来的知识点,我们这一篇主要讲述FMDB与SQLite在基本使用中的区别,大约需要5-10分钟时间讲述内容,欢迎大家指正. 基本使用区别 1.数 ...
- 工程日记之HelloSlide(3):如何使用Core Data数据库,以及和sqlite之间的对应关系
Core Data 和 SQLite 是什么关系 core data是对sqlite的封装,因为sqlite是c语言的api,然而有人也需要obj-c的api,所以有了core data ,另外,co ...
- 《驾驭Core Data》 第一章 Core Data概述
<驾驭Core Data>系列教程综合了<Core Data for iOS>,<Learning Core Data for iOS>,<Core Data ...
- 【转】深受开发者喜爱的10大Core Data工具和开源库
http://www.cocoachina.com/ios/20150902/13304.html 在iOS和OSX应用程序中存储和查询数据,Core Data是一个很好的选择.它不仅可以减少内存使用 ...
- Core Data & MagicalRecord
iOS 本地数据持久化存储: 1.plist 2.归档 3.NSUserDefaults 4.NSFileManager 5.数据库 一.CoreData概述 CoreData是苹果自带的管理数据库的 ...
- Core Data的那点事儿~
一.介绍下Core Data CoreData在早些年iOS开发中使用不多,因为其本身性能略低,以及不使用SQL语句而失去的灵活性,再加上FMDB之类封装SQLite的三方框架很好用,所以一直不受待见 ...
- Core Data浅谈初级入门
Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数 ...
随机推荐
- Portal技术介绍
Portal技术介绍 Portal是web应用发展的一个重要趋势,目前几乎所有大的软件厂商都有自己的Portal产品.并且Portal技术已经形成规范.本文对Portal技术和产品进行了分析,目的 ...
- (转)Linux监控工具
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧. 大多数Linux发行版本都装备了大量的监控工具,这些工具提供了能用作取得相关信息和系统活动的量度指标. 你能使用这些工具发现造 ...
- Codeforces 22B Bargaining Table
http://www.codeforces.com/problemset/problem/22/B 题意:求出n*m的方格图中全是0的矩阵的最大周长 思路:枚举 #include<cstdio& ...
- Verdigris: Qt without moc
https://woboq.com/blog/verdigris-qt-without-moc.html https://github.com/woboq/verdigris
- bzoj4034
http://www.lydsy.com/JudgeOnline/problem.php?id=4034 树链剖分. 跟NOI2015的“软件包管理”一模一样..... 河南的爽死了...... #i ...
- Oracle索引状态查询&索引重建
--检查损坏索引 SELECT status, COUNT(*) FROM dba_indexes GROUP BY status UNION SELECT status, COUNT(*) ...
- NSDate显示和时区的关系
在网上看到一篇介绍NSDate的博文.在它的“NSDate初始化“章节,说在使用 NSLog(@"当前时间 date = %@",[NSDate date]);时,显示出来的时间 ...
- java_内存划分
内存划分
- [RxJS] Handling Multiple Streams with Merge
You often need to handle multiple user interactions set to different streams. This lesson shows hows ...
- log4net使用具体解释
说明:本程序演示怎样利用log4net记录程序日志信息.log4net是一个功能著名的开源日志记录组件.利用log4net能够方便地将日志信息记录到文件.控制台.Windows事件日志和数据库(包含M ...