我希望从Facebook获取朋友信息并使用Core Data保存。
我构建了一个FriendsManager类,它从Facebook获取朋友列表(名称和ID) 和一个FriendInfo类,它获取id并获取有关此朋友的所有信息。
我以为我会这样做:
但是,我在哪里发布这个对象?
为了获取所有朋友信息,我将在一个循环中创建这些对象,该循环通过我的数组与朋友ID。
我也做了所有获取信息&使用Grand Central Dispatch进行地理编码,因此不知道FriendInfo何时获得所需的所有数据并准备就绪。
答案 0 :(得分:3)
Core Data对象通常是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您要对该对象执行的操作 - 保存或回滚(撤消自上次保存以来的所有更改。
答案 1 :(得分:0)
你解释的问题是“高级别”,很难给出具体的建议。但总的来说,您可能只想使用ARC,并且不要轻易解决您提到的大多数内存管理问题。
此外,由于您提到要使用核心数据,因此您不会释放要保存的任何对象,因为核心数据会保存上下文的所有对象,因此它们永远不会被“释放”。
关于使用GeneralManagerClass检索所有信息并填充朋友的新实例的建议方法通常没问题。我也这样做,这使得思考相对容易。
所以我先从它开始,然后提出更具体的问题。现在,如果你按照你建议的路线,我真的没有看到你提到的问题有任何一般性的困难......