Realm的学习笔记—1

Realm是一个移动端的数据库,RealmSQLiteCoreData的替代者。它可以节省你成千上万行代码和数周的工作,并且让你精巧的制作出令人惊叹的用户体验。

文档版本 0.93.2
github上获取

需求:
iOS7以上 OS X10.9以上 WatchKit.
Xcode 6 及以上 必需.
支持Objective-C Swift 1.2 Swift 2.0

安装

静态库安装 (Objective-C & Swift)

1.下载最新的Realm发行版本并在本地解压。
2.从 ios/static/目录里,把Realm.framework文件拖动到你的Xcode开发项目里的File Navigator 中。 确保Copy items into destination group’s folder已经被选中,按Finish。
3.在Xcode file explorer中选中你要的开发项目. 选择target,点击Build Phases选项. 在Link Binary with Libraries里按+,添加libc++.dylib
4.如果使用Realm + Swift,拖动Swift/RLMSupport.swift到你的Xcode projectFile Navigator中,点选Copy items if needed
5.如果在OSX项目中使用Realm,点击左上角的 + ,选择New Copy Files Phase,将其重命名为Copy Frameworks, 将Destination设置为Frameworks,并且添加Realm.framework

动态库安装 (Objective-C & Swift)

1.下载最新的Realm发行版本并在本地解压。
2.来到Xcode工程的General设置界面,从 ios/dynamic/或者osx/ 目录里,把Realm.framework文件拖动到Embedded Binaries里面。 确保Copy items into destination group’s folder已经被选中,按Finish。
3.In your unit test target’s “Build Settings”, add the parent path to Realm.framework in the “Framework Search Paths” section.
4.If using Realm with Swift, drag the file at Swift/RLMSupport.swift into the File Navigator of your Xcode project, checking the Copy items if needed checkbox.
5.If using Realm in an iOS 8 project, create a new “Run Script Phase” in your app’s target’s “Build Phases” and paste the following snippet in the script text field: bash "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/Realm.framework/strip-frameworks.sh" This step is required to work around an App Store submission bug when archiving universal binaries.

通过CocoaPods安装 (Objective-C Only)

如果你使用CocoaPods…
1.把pod "Realm"添加到你的Podfile中。
2.在命令行中执行pod install
3.将CocoaPods生成的.xcworkspace运用到你的开发项目中即可。

Xcode 插件

我们的Xcode插件让新建Realm模型model很轻松。安装Realm Xcode插件的最简单的途径就是通过AlcatrazRealmPlugin目录下。
你也可以自行手动安装:打开release zip中的plugin/RealmPlugin.xcodeproj, 点击编译build。 重启Xcode生效。
如果你使用Xcode新建文件File > New > File… — or ⌘ N,可以看到有一个新建Realm模型create a new realm model的选项。

Realm浏览器/数据库管理器

我们另外提供了一个独立的数据库管理工具,用来查看和编辑realm数据库.realm
你可以从browser/release zip目录下找到它。
使用菜单中的工具tool>生成演示数据库generate demo database, 你可以生成一个测试数据库(当然里面的数据是样本数据).

API 参考

所有的类和方法什么的都可以去API文档查阅

示例

你可以在examples/路径里面找到一个文件,叫做release zip。 里面包含了Objective-CSwiftRubyMotion的示例程序。 它们演示了Realm得很多功能和特性,例如数据库迁移,如何与UITableViewController’s一起使用,加密等等。

数据模型(model)

Realm的数据模型是用传统的Objective-C 接口interface@properties定义的。 就只要定义RLMObject的一个子类subclass或者一个现成的模型类,你就能轻松创建一个Realm的数据模型对象data model objectRealm模型对象和其他的objective-c的功能很相似–你可以给它们添加你自己的方法method和协议protocol然后和其他的对象一样使用。
唯一的限制就是从它们被创建开始,只能在一个进程中被使用
如果你已经安装了我们的Xcode插件 那么,在New File对话框中会有一个很漂亮的样板,你可以用它来创建interfaceimplementation文件。
你只需要为对象列表添加目标类型的属性property或者RLMArray的,就可以创建数据库关联和嵌套数据结构
#import <Realm/Realm.h>
@class Person;
// Dog model
@interface Dog : RLMObject
@property NSString *name;
@property Person *owner;
@end
RLM_ARRAY_TYPE(Dog) // define RLMArray<Dog>
// Person model
@interface Person : RLMObject
@property NSString *name;
@property NSDate *birthdate;
@property RLMArray<Dog> *dogs;
@end
RLM_ARRAY_TYPE(Person) // define RLMArray<Person>
// Implementations
@implementation Dog
@end // none needed
@implementation Person
@end // none needed

RLMObject的相关细节.

属性property种类
Realm支持以下的属性property种类: BOOL,boolintNSIntegerlongfloatdoubleCGFloatNSStringNSDate 和NSData
你可以使用RLMArray<NSObject> 和RLMObject来模拟对一或对多的关系
Realm也支持RLMObject继承。
属性property特性
请注意Realm忽略了objective-cproperty attributes,像nonatomicatomicstrongcopyweak等等。
所以,为了避免误解,我们推荐你在写入模型的时候不要使用任何的property attributes。但是,假如你设置了,这些attributes会一直生效直到RLMObject被写入realm数据库。
无论RLMObject在或不在realm中,你为gettersetter自定义的名字都能正常工作。

数据模型定制

几个存在的类方法进一步指定模型信息:
+attributesForProperty:可以被重写来来提供特定属性property的属性值attrbutes例如某个属性值要添加索引。
+defaultPropertyValues可以被重写,用以为新建的对象提供默认值。
+primaryKey可以被重写来设置模型的主键。定义主键可以提高效率并且确保唯一性。
ignoredProperties可以被重写来防止Realm存储模型属性。

存储对象

对对象的所有更改(添加,修改 和删除)都必须通过写入事务完成。
Realm的对象可以被实例化并且被单独使用,和其他常规对象无异。
如果你想要在多个线程中共享或者永久保存以重复使用对象,你必须将其存储到Realm数据库中——这个操作必须在写事务中完成。 你可以参照如下代码添加一个对象:
创建一个对象
Person *author = [[Person alloc] init];author.name = @"David Foster Wallace";
获取一个默认realm对象
RealmRLMRealm *realm = [RLMRealm defaultRealm];
你只须这么做一次(单线程操作) Add to Realm with transaction
[realm beginWriteTransaction];
[realm addObject:author];
[realm commitWriteTransaction];

等到你把这个对象添加到realm数据库里面之后, 你可以在多个线程里面共享之。
并且从现在开始,你所做的每一次更改(必须在一个写事务中完成)也会被永久储存。
等到写事务完成,这个更改将对所有共享这个Realm数据库的线程可见。
需要注意的是,写入操作会相互阻塞,而且其相对应的进程也会受到影响。
这和其他的永久数据存储解决方案是一样的,所以我们建议你使用常用的,也是最有效的方案, 将所有写入放到一个单独的进程中。
还要注意的是,因为realm的MVCC结构, 读取并不会 因为一个进行中的写事务而受到影响。
详细内容,请阅读RLMObject

查询

所有的数据抓取都很简单,并且直到获得数据之后才创建副本。
关于使用RLMResults的小贴士:
Realm的对象查询返回一个RLMResults对象。它包含了一系列的RLMObject。
RLMResults有一个与NSArray很相似的interface(接口)并且对象可以通过索引(index)下标获取。
但不同于NSArrays的是,RLMResult是归类的——它只能容纳一种RLMObjects类型。
根据种类获取对象从realm中获取对象的最基本方法就是 [RLMObject allObjects], 它返回一个RLMResults,里面是查询的子类的所有RLMObject实例。
// 默认查询RealmRLMResults *dogs = [Dog allObjects]; // 从默认Realm中查找所有的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值