对NSManagedObject的弱引用并不是零

时间:2016-06-11 18:43:55

标签: ios core-data automatic-ref-counting weak-references

我观察到对NSManagedObject的弱引用的奇怪行为。我有一个容器,它对NSManagedObject有一个弱引用:

class Container: NSObject {
    weak var mo: NSManagedObject?
}

假设mo是某些NSManagedObject,我在下面的代码中断言失败:

let container = Container()
container.mo = mo
mo = nil
assert(container.mo == nil) // failed

如果我使用NSObject而不是NSManagedObject(container.momo),则相同的测试用例会成功。 mo的上下文不会保留其对象(默认情况下)。

这里发生了什么,为什么弱参考不能自动填充? 这种行为是否记录在案?

2 个答案:

答案 0 :(得分:0)

您需要将container.mo = nil更改为mo。否则,引用仍然有效,因为:

  1. 其他内容提及mo
  2. container.mo在当前运行循环结束时,自动释放池耗尽时,不会被释放。如果没有其他参考,则nil public Array jsonToArray(String json) { JSONObject myjson = null; try { myjson = new JSONObject(json); } catch (JSONException e) { e.printStackTrace(); } JSONArray the_json_array = null; try { the_json_array = myjson.getJSONArray("profiles"); } catch (JSONException e) { e.printStackTrace(); } int size = the_json_array.length(); ArrayList<JSONObject> arrays = new ArrayList<JSONObject>(); for (int i = 0; i < size; i++) { JSONObject another_json_object = null; try { another_json_object = the_json_array.getJSONObject(i); } catch (JSONException e) { e.printStackTrace(); } arrays.add(another_json_object); } JSONObject[] jsons = new JSONObject[arrays.size()]; arrays.toArray(jsons); return Array jsons; } 时的情况。

答案 1 :(得分:0)

CoreData缓存托管对象。 CoreData是一个数据库。它很有效率。 CoreData保存对它创建的对象的引用,并在它喜欢的时候抛弃它们。不是你喜欢它。这样,当它再次需要时,它不必重新创建对象。

当对象消失时,保证弱引用被填充。无法保证CoreData维护的托管对象何时消失。