1
我的設置簡短說明:我應該如何爲存儲SQL對象的NSMutableSet實現Hash?
有一個SQLObject
基類有一個整數rowId
。
return [[self class] hash]^self.rowId;
所有對象都存儲在一個NSMutableSet
所以,如果他們從要求:
return [self isKindOfClass:[otherObject class]] && self.rowId == otherObject.rowId;
它用它的ROWID異或它的類實現哈希:它通過比較同類產品和它的rowId
實現isEqual
數據庫再次使用同一個對象,而不是創建一個新對象。當釋放SQLObject
時,它會檢查retainCount
是否恰好爲1,如果是,則將其從集中刪除,從而取消分配。
問題是,它試圖從集合中刪除它時找不到該對象。顯然,rowId不會改變,類也不會改變,因此散列和isEqual都不會在整個對象的生命中發生變化。這是怎麼回事?有人有任何想法,爲什麼它可能沒有找到它?
如果我將集合更改爲NSMutableArray,它會找到它。
我想看看你的代碼在NSMutableSet中添加和測試成員資格。 – 2009-08-16 12:53:04