我观察到对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.mo
和mo
),则相同的测试用例会成功。 mo
的上下文不会保留其对象(默认情况下)。
这里发生了什么,为什么弱参考不能自动填充? 这种行为是否记录在案?
答案 0 :(得分:0)
您需要将container.mo = nil
更改为mo
。否则,引用仍然有效,因为:
mo
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维护的托管对象何时消失。