簡述
Realm是一款針對移動設備設計的數據庫框架,已經涵蓋所有主流的開發平臺。代碼開源
Realm的特性
1、全平臺支持,數據文件是通用的, 接口設計相同,減少了學習成本。
2、Realm的安裝和學習非常簡單。
3、關係型數據庫,支持泛型
4、官方稱比SQLite的常規操作還要快。
學習資源
官方app數據瀏覽: Realm browser app
工具 : RealmPlugin ——xcode中的插件更方面的創建realm數據模型 Alcatraz(github)
Realm的一個Demo
Demo描述:我們創建一個數據庫,在數據庫中寫入兩種類型的數據,Dog類型, Person類型,然後Person擁有Dog
here we go!
1、創建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);
}