Realm初探(一)

簡述


Realm是一款針對移動設備設計的數據庫框架,已經涵蓋所有主流的開發平臺。代碼開源

Realm的特性


1、全平臺支持,數據文件是通用的, 接口設計相同,減少了學習成本。

2、Realm的安裝和學習非常簡單。

3、關係型數據庫,支持泛型

4、官方稱比SQLite的常規操作還要快。

學習資源


主站

官方app數據瀏覽: Realm browser app

工具 : RealmPlugin ——xcode中的插件更方面的創建realm數據模型 Alcatraz(github)

github

Realm的一個Demo


Demo描述:我們創建一個數據庫,在數據庫中寫入兩種類型的數據,Dog類型, Person類型,然後Person擁有Dog

here we go!

1、創建model類



model類

Dog和Person都要繼承Rleam庫的RLMObject


Dog代碼

@property NSString *dogName;  //小狗的名字

@property int dogAge; //小狗的年齡

說明

/**

在聲明變量時,在屬性的類型前面不再添加 strong, weak, nonatomic等描述,Realm官方推薦的寫法

*/

Person代碼

RLM_ARRAY_TYPE(Dog)

@interface Person : RLMObject

@property NSString *personName;

@property RLMArray*dogs;

/** RLM_ARRAY_TYPE(ObjectType) ... 

@property RLMArray*arrayOfObjectTypes;

*/

注意有個坑

//Realm框架中 RLMArray類型必須設置保存集合中對象的類型

2、創建對象

Dog *dog = [[Dog alloc] init];

dog.dogName = @"jack";

dog.dogAge = 3;

Dog *dog2 = [[Dog alloc] init];

dog2.dogName = @"jerry";

dog2.dogAge = 2;

//2:添加一個主人的記錄

Person *master = [[Person alloc] init];

master.personName = @"小張";

[master.dogs addObject:dog];

[master.dogs addObject:dog2];

3、寫入數據庫

向數據庫中寫入內容 ——>添加小狗

RLMRealm *realm = [RLMRealm defaultRealm];

[realm transactionWithBlock:^(){

[realm addObject:dog];

}];

還有一個寫入內容等效方法

//========================= 等效方法

//    [realm beginWriteTransaction];

//    [realm addObject:dog2];

//    [realm addObject:master];

//    [realm commitWriteTransaction];

//=========================

說明一下,其實使用transactionWithBlock的內部實現就是使用beginWriteTransaction和commitWriteTransaction進行組合實現的。

beginWriteTransaction和commitWriteTransaction中間的部分都會確認爲是對數據庫的操作。

4:結合線程

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){

//  (千萬注意:不要跨線程去操作和處理對象 )

Dog *dog3 = [[Dog alloc] init];

dog3.dogName = @"Tom";

dog3.dogAge = 13;

RLMRealm *realm = [RLMRealm defaultRealm];

[realm beginWriteTransaction];

[realm addObject:dog3];

[realm commitWriteTransaction];

});

特別說明,不要在跨線程的情況下操作同一個對象

5:數據庫查詢

/**

Realm的查詢結果是動態的

*/

RLMResults *results = [Dog objectsWhere:@"dogAge > 2"];

遍歷打印

//遍歷打印

for (Dog *tempDog in results) {

NSLog(@"=========================");

NSLog(@"tempDog.dogName = %@",tempDog.dogName);

NSLog(@"tempDog.dogAge = %d",tempDog.dogAge);

}



打印日至
發佈了22 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章