当前位置:Gxlcms > 数据库问题 > Realm数据库的使用(一)数据库的简单介绍和模型的创建

Realm数据库的使用(一)数据库的简单介绍和模型的创建

时间:2021-07-01 10:21:17 帮助过:6人阅读

#import <Realm/Realm.h> 2 3 @interface Person : RLMObject 4 @property NSString *name; 5 @property int age; 6 @property NSDate *birthdate; 7 @end 8 9 // This protocol enables typed collections. i.e.: 10 // RLMArray<Person> 11 RLM_ARRAY_TYPE(Person)

属性(property)种类

Realm支持以下的属性(property)种类: BOOL, bool, int, NSInteger, long, float, double, CGFloat, NSString, NSDate 和 NSData。

也可以使用RLMArray\<_Object_\> 和 RLMObject来模拟对一或对多的关系——Realm也支持RLMObject继承。

属性(property)特性(attributes)

请注意Realm忽略了objective-c的property attributes, 像 nonatomic, atomic, strong, copy, weak 等等。 所以,在写入模型的时候不要使用任何的property attributes。但是,假如你设置了,这些attributes会一直生效直到RLMObject被写入realm数据库。 无论RLMObject在或不在realm中,为getter和setter自定义的名字都能正常工作

数据模型定制

  • +attributesForProperty: 可以被重写来来提供特定属性(property)的属性值(attrbutes)例如某个属性值要添加索引。
  • @interface Book : RLMObject
    @property float price;
    @property NSString *title;
    @end
    
    @implementation Book
    + (NSArray *)indexedProperties {
      return @[@"title"];
    }
    @end

     

  • +defaultPropertyValues 可以被重写,用以为新建的对象提供默认值。
  • @interface Book : RLMObject
    @property float price;
    @property NSString *title;
    @end
    
    @implementation Book
    + (NSDictionary *)defaultPropertyValues {
        return @{@"price" : @0, @"title": @""};
    }
    @end

     

  • +primaryKey 可以被重写来设置模型的主键。定义主键可以提高效率并且确保唯一性。
  • @interface Person : RLMObject
    @property NSInteger id;
    @property NSString *name;
    @end
    
    @implementation Person
    + (NSString *)primaryKey {
        return @"id";
    }
    @end

     

  • ignoredProperties 可以被重写来防止Realm存储模型属性。
  • @interface Person : RLMObject
    @property NSInteger tmpID;
    @property (readonly) NSString *name; // read-only properties are automatically ignored
    @property NSString *firstName;
    @property NSString *lastName;
    @end
    
    @implementation Person
    + (NSArray *)ignoredProperties {
        return @[@"tmpID"];
    }
    - (NSString *)name {
        return [NSString stringWithFormat:@"%@ %@", self.firstName, self.lastName];
    }
    @end

    存储对象

  • Rrealm的对象可以被实例化并且被单独使用,和其他常规对象无异。 如果你想要在多个线程中共享或者永久保存以重复使用对象,你必须将其存储到Realm数据库中——这个操作必须在写事务中完成。 你可以参照如下代码添加一个对象:
  • // Create object
    Person *author = [[Person alloc] init];
    author.name    = @"Erickson";
    
    // Get the default Realm
    RLMRealm *realm = [RLMRealm defaultRealm];
    // You only need to do this once (per thread)
    
    // Add to Realm with transaction
    [realm beginWriteTransaction];
    [realm addObject:author];
    [realm commitWriteTransaction];

    等到把这个对象添加到realm数据库里面之后, 可以在多个线程里面共享之。并且从现在开始,所做的每一次更改(必须在一个写事务中完成)也会被永久储存。等到写事务完成,这个更改将对所有共享这个Realm数据库的线程可见。

    需要注意的是,写入操作会相互阻塞,而且其相对应的进程也会受到影响。这和其他的永久数据存储解决方案是一样的,所以建议你使用常用的,也是最有效的方案, 将所有写入放到一个单独的进程中。

    还要注意的是,因为realm的MVCC结构, 读取并不会因为一个进行中的写事务而受到影响。

Realm数据库的使用(一)数据库的简单介绍和模型的创建

标签:

人气教程排行