realmについて

22
浅野 友希 について

Upload: yuki-asano

Post on 16-Jul-2015

2.741 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Realmについて

浅野 友希

について

Page 2: Realmについて

Who am I?

浅野 友希 (Asano Yuki) @yuuki1224st

京都工芸繊維大学 工芸科学部 電子システム工学課程 5回生

書ける言語: Objective-C 一応歩んできた道.. C→VisualBasic→Java(Android)→PHP→Ruby→Objective-C

Page 3: Realmについて

で、今日発表することは..

Page 4: Realmについて
Page 5: Realmについて

今日は、Realmの話をしようと思います。

面白いかどうかわかりませんが..

1. Realmとは

2. 使い方

3. Realmの内部的な話(ソースコード)

Page 6: Realmについて

とは..

・Mobileの データベース+ORM (Cocoa/Android)

似たようなのだと.. SugarRecord / MagicalRecord FMDB / CoreData / sqlite / Mantle

Page 7: Realmについて
Page 8: Realmについて
Page 9: Realmについて

Realmの使い方

Page 10: Realmについて

RealmModelクラスの定義

関連付け(1対1)

関連付け(1対多)

Page 11: Realmについて

オブジェクトの追加

Realmモデルクラスのインスタンス作って

Realmインスタンス作って

ここでトランザクション使って、 Realmにオブジェクトを保存してる

Page 12: Realmについて

オブジェクトの取り出し

ここで取り出してる

NSPredicateを使ってフェッチ

Page 13: Realmについて

JSONデータ

こんな感じで合わせておけば..

Contact

Location

Venue

Page 14: Realmについて

JSON → RLMObject が簡単!! (Mantleみたい)

Page 15: Realmについて

スレッド

スレッド間でインスタンスの受け渡しはできない

RLMRealmインスタンス RLMRealmインスタンス

Page 16: Realmについて

realm-cocoaの内部的な話 (ソースコード)

Page 17: Realmについて

realm-cocoa realm-core(C++)

RLMRealm

RLMSchema

RLMObjectSchema

Group

Table

Dog : RLMObject

RLMResults Table(検索結果)

OSSじゃない! (OSSで公開予定)OSS

RLMPropertyRLMPropertyRLMProperty

RLMObjectSchema

RLMPropertyRLMPropertyRLMProperty

RLMObjectSchema

RLMPropertyRLMPropertyRLMProperty

Person: RLMObject Food : RLMObject

Row (Realmモデルクラスのインスタンスと対応)Row (Realmモデルクラスのインスタンスと対応)Row (Realmモデルクラスのインスタンスと対応)

Page 18: Realmについて

[RLMRealm defaultRealm]で、Realmインスタンスが作られる時

このタイミングになる

Page 19: Realmについて

RLMSchema.mmに + (void)initialize; 1. 全てのクラスを objc_copyClassList() でとってきて、

RLMObject継承のものだけを調べる

2. Realmモデルクラスのものだけ、class_copyPropertyList()してRLMPropertyインスタンスを作って, RLMObjectSchemaインスタンスを作る

RLMSchema

RLMObjectSchema

Dog : RLMObject

RLMPropertyRLMPropertyRLMProperty

RLMObjectSchema

RLMPropertyRLMPropertyRLMProperty

RLMObjectSchema

RLMPropertyRLMPropertyRLMProperty

Person: RLMObject Food : RLMObject

RLMSchemのグローバル変数_sharedSchema

Page 20: Realmについて

アクセッサクラスが作られる

Userクラス

RLMStandalone_UserクラスRLMAccessor_Userクラス

アクセッサがMethod Swizzlingされてて C++のAPIからゲット/セットできる

Page 21: Realmについて

なんでSQLiteより速いのか?(予想)※はっきりとはわかっていません

1. そもそもrealm-coreがsqliteより薄い?

2. RLMResultsの遅延させる仕組み

Sqliterealm-core

CoreDatarealm-cocoa CのAPIC++API

fetch結果のTableRLMResultsfetch要求

RLMResultsが返ってくる

結論

Page 22: Realmについて

ご静聴ありがとうございました!!