2016-08-31 6 views
2

Мне нужен способ, чтобы получить хэш-код в RLMObject, но когда я осматривал выполнение области действия, и я узнал, что Realm (Objective-C) использует primaryKey на RLMObjectBase:Можно ли переопределить RLMObject -hash?

- (NSUInteger)hash { 

    if (_objectSchema.primaryKeyProperty) { 
     id primaryProperty = [self valueForKey:_objectSchema.primaryKeyProperty.name]; 

     // modify the hash of our primary key value to avoid potential (although unlikely) collisions 
     return [primaryProperty hash]^1; 
    } 
    else { 
     return [super hash]; 
    } 
} 

мне нужно что-то больше hashable и это отличается, если свойства объекта. Мой вопрос: могу ли я безопасно переопределить метод -hash в моем подклассе, не вникая в какой-либо внутренний механизм Realm?

ответ

3

Realm не использует -[RLMObject hash] внутренне, поэтому он не накладывает никаких ограничений на то, что вы его переопределяете.

Единственное требование состоит в том, что любые объекты, которые -isEqual: возвращает YES для также должны иметь один и тот же результат от -hash, и хэш не может изменить после того, как объект был добавлен в коллекцию Foundation обычный фонд один. Realm хеширует первичный ключ, потому что это единственная неизменная вещь, идентифицирующая объект, к которому он имеет доступ.

+0

Большое спасибо за разъяснение –

Смежные вопросы