2

我想从Facebook获取朋友信息并将其与Core Data一起保存。我应该在哪里发布一个对象?它可以释放自己吗?

我构建了一个FriendsManager类,它获取来自Facebook(姓名和编号) 的朋友列表以及一个FriendInfo类,该类使用该编号并获取有关此朋友的所有信息。

我想我会做这种方式:

  • 创建FriendsManager的对象让它我所有的朋友(不是一个真正的问题);
  • 在FriendsManager中创建FriendInfo的一个实例;
  • 给它的ID,让它得到我需要的所有信息,包括家乡的地理编码;
  • 将所有这些与核心数据保存在一起。

但是,我在哪里释放这个对象?

为了获得所有的朋友的信息,我会创建这些对象的循环,通过我的阵列与朋友ID的。

我也做所有的获取信息&与大中央调度地理编码,所以不知道FriendInfo何时获得所需的所有数据,并准备好。

回答

3

核心数据对象通常是NSManagedObject的子类,而不是NSObject。您不会分配或释放它,您可以使用ManagedObjectContext创建一个,并且您可以保存或删除它,但由于您不拥有它而不会释放它。

NSObject(在ARC之前)遵循内存管理的通常规则 - 简单地说,如果你通过alloc,copy或者以new开头的方法来获取它,它就是你的,并且当你不再使用时需要使用release它。如果你没有分配它 - 例如"NSString *string = [NSSTring stringWithFormat:@"test"];那么它是自动释放的,你不需要释放它。

相信分析器 - shift-command-B。

听起来像你可能想要定义你的核心数据模型,然后创建一个NSManagedObject子类的朋友信息。您可以使用类似[NSEntityDescription insertNewObjectForEntityForName:@"FriendInfo" inManagedObjectContext:moc];而不是[[FriendInfo alloc] init]来创建它,就像它是NSObject一样。思想上的转变是,在您将任何数据放入该对象之前,该对象由ManagedObjectContext创建和管理,您请求一个新数据并放入数据,然后通知ManagedObjectContext您想使用该对象完成的操作 - 保存或回滚(撤消自上次保存以来的所有更改)。

+0

我忘了说FriendInfo不是我想要保存的班级!我已经有一个名为Friend的NSManagedObject,我想我在FriendInfo中创建其中的一个,并保存所有信息!所以我将不得不释放我的FriendInfo因为我用alloc创建它! ARC与iOS 5一起来吧? – bllubbor

+1

为什么不直接定义NSManagedObject子类并将要直接存储的值写入它?似乎你不需要中间对象。这种方法不会因为ARC而改变,因为您不拥有NSManagedObjects,您仍然不会保留或在假定的NDA未来操作系统中释放它们:-) –

+0

所以您要说我可以获取所有信息I需要在NSManagedObject类中?我可以像普通课程一样使用它吗?写Methodes和东西?我怎么知道它生活了多久?例如从其他类的回调? – bllubbor

0

您解释的问题相当“高级”,很难给出具体的建议。但总的来说,您可能只想使用ARC,并且不会遇到大部分您提到的内存管理问题。

此外,由于您提到要使用核心数据,因为核心数据会保存上下文的所有对象,因此它们永远不会被“释放”,因此您不会释放任何要保存的对象。

有关使用GeneralManagerClass检索所有信息并填充朋友的新实例的建议方法通常是可以的。我也这样做,它使认为相对容易。

所以我只是从它开始,然后提出更具体的问题。就目前而言,如果您按照您建议的路线行事,我确实没有看到您提到的问题存在一般难度...

+0

请注意我写给@ Adam的帖子的评论 – bllubbor

+0

我确实有一个问题!我可以像普通类一样处理NSManagedObject吗?我的意思是我可以写方法和东西吗?我可以进行地理编码并获得该课程中的所有其他信息吗?我怎么知道它活着多久?例如,如果我有其他类的回调?我可以将它设置为某种东西的代表吗? – bllubbor

相关问题