realmについて
TRANSCRIPT
浅野 友希
について
Who am I?
浅野 友希 (Asano Yuki) @yuuki1224st
京都工芸繊維大学 工芸科学部 電子システム工学課程 5回生
書ける言語: Objective-C 一応歩んできた道.. C→VisualBasic→Java(Android)→PHP→Ruby→Objective-C
で、今日発表することは..
今日は、Realmの話をしようと思います。
面白いかどうかわかりませんが..
1. Realmとは
2. 使い方
3. Realmの内部的な話(ソースコード)
とは..
・Mobileの データベース+ORM (Cocoa/Android)
似たようなのだと.. SugarRecord / MagicalRecord FMDB / CoreData / sqlite / Mantle
Realmの使い方
RealmModelクラスの定義
関連付け(1対1)
関連付け(1対多)
オブジェクトの追加
Realmモデルクラスのインスタンス作って
Realmインスタンス作って
ここでトランザクション使って、 Realmにオブジェクトを保存してる
オブジェクトの取り出し
ここで取り出してる
NSPredicateを使ってフェッチ
JSONデータ
こんな感じで合わせておけば..
Contact
Location
Venue
JSON → RLMObject が簡単!! (Mantleみたい)
スレッド
スレッド間でインスタンスの受け渡しはできない
RLMRealmインスタンス RLMRealmインスタンス
realm-cocoaの内部的な話 (ソースコード)
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モデルクラスのインスタンスと対応)
[RLMRealm defaultRealm]で、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
アクセッサクラスが作られる
Userクラス
RLMStandalone_UserクラスRLMAccessor_Userクラス
アクセッサがMethod Swizzlingされてて C++のAPIからゲット/セットできる
なんでSQLiteより速いのか?(予想)※はっきりとはわかっていません
1. そもそもrealm-coreがsqliteより薄い?
2. RLMResultsの遅延させる仕組み
Sqliterealm-core
CoreDatarealm-cocoa CのAPIC++API
fetch結果のTableRLMResultsfetch要求
RLMResultsが返ってくる
結論
ご静聴ありがとうございました!!