谈谈用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对象.在此数 ...
随机推荐
- github三大步骤
1)git init : 初始化当前目录,把这个目录变成Git可以管理的目录 2)git add [文件名称]: 把文件添加到仓库 3)git commit -m "对当前提交文件的描述& ...
- Linux环境下使用JFS文件系统
Linux环境下使用JFS文件系统 JFS是IBM公司为linux系统开发的一个日志文件系统.从IBM的实力及它对Linux的态度来看,JFS应该是未来日志文件系统中最具实力的一个文件系统. JFS提 ...
- 特征提取(Detect)、特征描述(Descriptor)、特征匹配(Match)的通俗解释
特征匹配(Feature Match)是计算机视觉中很多应用的基础,比如说图像配准,摄像机跟踪,三维重建,物体识别,人脸识别,所以花一些时间去深入理解这个概念是不为过的.本文希望通过一种通俗易懂的方式 ...
- BaseAdapter自定义适配器——思路详解
BaseAdapter自定义适配器——思路详解 引言: Adapter用来把数据绑定到扩展了AdapterView类的视图组.系统自带了几个原生的Adapter. 由于原生的Adapter视图功能太少 ...
- UBI(unsorted block image )块管理
一.介绍 ubi是unsorted block images的缩写,是由IBM开发设计的,它与ubifs有不同的含义,ubifs是一种文件系统(nokia开发的):而ubi是一种块管理工具,工作在mt ...
- THREE.JS + Blender(obj、mtl加载代码)
2016-11-04 09:23:17 THREE.REVISION "81dev" Blender "2.78" 1.加载OBJ.MTL文件 // T ...
- 关于js对象引用的小例子
看完下面的代码,相信对js对象引用又有了新的认识,直接上代码: // split()把字符串分割成字符串数组 // reverse() 会改变数组本身,**并返回原数组的引用**.!!!! var a ...
- poj 2251 Dungeon Master(bfs)
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- git hub 资料汇总
tobecrazy Selenium automation test framework https://github.com/tobecrazy/Demo Smartphone Test F ...
- 如何将XML转换成XSD(XML Schema)文件
将xml装换为xsd,先决条件是已经安装了Visual Stutio 1) 输入cmd在运行窗口 2) 将xsd的路径加入到path变量 set path=%path%;C:\Program File ...