gpt4 book ai didi

ios - RLMArray<> 每次返回不同的实例

转载 作者:行者123 更新时间:2023-12-01 18:49:30 26 4
gpt4 key购买 nike

@ Realm :

为什么我的 RLMArray 在运行时会给出不同的对象实例?

这就是我定义 RLMArray 的方式:

@property RLMArray<HouseImage> *images;

我添加/删除 HouseImage一直指向这个数组的对象(在事务中)。

当我以以下方式访问图像时:
_house.images[indexPath.row]

每次我得到不同的实例,即
(lldb) p _house
(RLMAccessor_v0_House *) $52 = 0x00000001701a5780
2015-08-30 23:02:07.695 Apt Note[5992:1308601] Loading image named: 1C178A31-5F33-4CD3-9B7C-B026DF7A5E19_2
2015-08-30 23:02:07.731 Apt Note[5992:1308601] Loading image named: CFD99689-12C4-49CB-AAB6-850FFCD902D7_3
2015-08-30 23:02:07.750 Apt Note[5992:1308601] Loading image named: 194D55EA-125A-4CFC-8CCF-758E929BE7D5_4

// This is the first time when iterating the array. The [house] object remains same, but not the images array items.
(lldb) p _house
(RLMAccessor_v0_House *) $53 = 0x00000001701a5780
(lldb) p _house.images[0]
(RLMAccessor_v0_HouseImage *) $54 = 0x00000001740bbf60
2015-08-30 23:02:36.947 Apt Note[5992:1308601] Loading image named: 1C178A31-5F33-4CD3-9B7C-B026DF7A5E19_2
2015-08-30 23:02:36.986 Apt Note[5992:1308601] Loading image named: CFD99689-12C4-49CB-AAB6-850FFCD902D7_3
2015-08-30 23:02:37.031 Apt Note[5992:1308601] Loading image named: 194D55EA-125A-4CFC-8CCF-758E929BE7D5_4

// This is the second iteration
(lldb) p _house
(RLMAccessor_v0_House *) $55 = 0x00000001701a5780
(lldb) p _house.images[0]
(RLMAccessor_v0_HouseImage *) $56 = 0x00000001740bc140

如果你看到我的日志, house对象保持不变。但是, RLMArray 中的实例( images ) 突然发生了变化。在发生这种情况时,除了这段代码之外,没有人正在读取/写入 Realm 。

有谁知道为什么会这样?

如果我不清楚,请告诉我,我会尽量解释得更清楚。

最佳答案

这是预期的行为。为了实现零拷贝存储系统,Realm 根本不保存实际数据。 Realm 为您的持久属性调整属性访问器以动态获取属性,因此当您多次访问该属性时,它实际上每次都返回一个不同的实例,这是设计的。 RLMArray也和它一样。所以每次你想访问 RLMArray 的元素时,Realm 通过创建不同的代理对象返回。

仅供引用:如果对象没有持久化,RLMArray每次返回相同的实例。因为RLMArrayNSArray 支持https://github.com/realm/realm-cocoa/blob/master/Realm/RLMArray.mm#L153-L159 .

但是一旦对象被持久化,RLMArray更改为 RLMArrayLinkView .由于以上原因,RLMArrayLinkView每次都会返回不同的实例。 https://github.com/realm/realm-cocoa/blob/master/Realm/RLMArrayLinkView.mm#L193-L197

关于ios - RLMArray<> 每次返回不同的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32303524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com