谈谈用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对象.在此数 ...
随机推荐
- IOS单例模式(Singleton)
IOS单例模式(Singleton) 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模 ...
- linux下如何编译python生成libpython2.5.so动态库
http://biancheng.dnbcw.info/python/245306.html
- FastMM内存泄露
转自:http://www.2ccc.com/article.asp?articleid=4879FastMM是非常优秀的内存管理器,但是从FastMM4Options.inc中找到合适自已程序的选项 ...
- usaco5.5-Picture
离散化计算重叠矩形的周长. 称平行于x轴的边为横边,我们以横边为例,某一矩形中y坐标比较小的横边我们称为始边,另一边我们称为终边.用一条扫描线从下往上扫描,当扫到一条始边的时候,如果这条始边的正下方出 ...
- Exchange Server 2010/2013架构改变
Exchange Server 2010架构 Exchange Server 2013架构
- 【Eclipse DDMS】 Can't bind to local 8600 for debugger
问题原因: 电脑上同时安装了Eclipse 和Android Studio两个ide. 关键是使用eclipse adb连接真机时候,android studio也处于运行状态,后者默认也是要连接ad ...
- 56个PHP开发常用代码
2016/02/14 6203 4 在编写代码的时候有个神奇的工具总是好的!下面这里收集了 50+ PHP 代码片段,可以帮助你开发 PHP 项目. 这些 PHP 片段对于 PHP 初学者也非常 ...
- android中使用哪种方式解析XML比較好
SAX是一个用于处理XML事件驱动的"推"模型. 长处是一种解析速度快而且占用内存少的xml解析器,它须要哪些数据再载入和解析哪些内容. 缺点是它不会记录标签的关系.而要让你的应用 ...
- docke 网络配置
一,docker 的bridge模式是和vmware中的nat模式类似的,但是如果想要弄成和vmwae中的bridge怎么办呢? 说明,bridge模式获取的Ip是与宿主机的ip是出于同一个网段的. ...
- iOS会议和组织
全世界有许多iOS会议和组织,如果你没有机会去参加,知道他们的存在和向他们学习对你也是有益的.事实上,他们中有些提供免费的幻灯片.视频,有用资料等,所以你不能够忽视他们. 有一些会议的主题并不仅仅关于 ...