Xcode CoreData-managedObjectContext:save:在registeredObjects集中保留项目

Xcode CoreData-managedObjectContext:save:在registeredObjects集中保留项目,xcode,core-data,memory-management,nsmanagedobject,retain,Xcode,Core Data,Memory Management,Nsmanagedobject,Retain,我想我在CoreData方面缺少了一个关键的知识,我想知道是否有人能帮我解决这个问题。我正在尝试创建新的对象实体,但在保存之后,我的内存从未释放。我有一个名为UserEntity的对象,它包含两个字符串,sUsername和sPassword,它们是从UITextFields设置的(见下文) 这将从我的视图控制器调用,如下所示: if ([Singleton createUserEntityWithUsername:self.tfUsername.text andPassword:self.tf

我想我在CoreData方面缺少了一个关键的知识,我想知道是否有人能帮我解决这个问题。我正在尝试创建新的对象实体,但在保存之后,我的内存从未释放。我有一个名为UserEntity的对象,它包含两个字符串,sUsername和sPassword,它们是从UITextFields设置的(见下文)

这将从我的视图控制器调用,如下所示:

if ([Singleton createUserEntityWithUsername:self.tfUsername.text andPassword:self.tfPassword.text])
    {
}
saveContext如下所示:

   - (void)saveContext
    {
        NSError *error = nil;
        NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
        if (managedObjectContext != nil) {        
            if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
               NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            }
            else
            {
                NSLog(@"Save successful");
            }
        }
        managedObjectContext = nil;
    }
这一切都保存得很好,但是,如果我在单例创建后中断。。。函数,然后我可以看到以下内容:

po [[Singleton sharedSingleton].managedObjectContext registeredObjects]
{(
    <UserEntity: 0xa3a4dd0> (entity: UserEntity; id: 0xa3b41d0 <x-coredata://8F241F56-D1A2-4BC2-A575-FF9972B15629/UserEntity/p1> ; data: {
    sPassword = ejd;
    sUsername = ejd2;
})
)}
po[[Singleton sharedSingleton].managedObjectContext registeredObjects]
{(
(实体:UserEntity;id:0xa3b41d0;数据:{
sPassword=ejd;
sUsername=ejd2;
})
)}
我的印象是,NSManagedObjectContext在保存对象更改后清除了此集合?这是唯一的NSManagedObjectContext等,因此任何人都可以解释发生了什么,因为我不知道我是要显式释放此列表中的项,还是我的内存管理出了问题


非常感谢您的帮助

在主运行中心上执行
-reset
。并确保对该MOC中存在的NSMO的任何引用也无效


顺便说一句,不要在核心数据中存储密码。它们未加密保存,任何人都可以阅读。改用钥匙链。

啊,好的,所以每次保存时我都必须手动重置MOC?谢谢你的信息。在我使用它们之后,我一直将所有引用设置为零,等等,我认为只是MOC保留了这些引用使得我的应用程序的内存不断增加。谢谢你的信息,我会关掉PW的。它们实际上并不需要,只是一些虚拟数据。我会尝试一下,然后再给你回复!如果要释放对象,只需重置。如果你想继续与他们合作,那么就不要担心管理他们。
po [[Singleton sharedSingleton].managedObjectContext registeredObjects]
{(
    <UserEntity: 0xa3a4dd0> (entity: UserEntity; id: 0xa3b41d0 <x-coredata://8F241F56-D1A2-4BC2-A575-FF9972B15629/UserEntity/p1> ; data: {
    sPassword = ejd;
    sUsername = ejd2;
})
)}