Где я должен выпустить объект?Это может выпустить себя? - PullRequest
2 голосов
/ 25 августа 2011

Я хочу получить информацию о друзьях из Facebook и сохранить ее с Core Data.

Я создаю класс FriendsManager, который получает список друзей из Facebook (имя и идентификатор) и класс FriendInfo, который принимаетid и получает всю информацию об этом друге.

Я думал, что сделаю это следующим образом:

  • Создайте объект FriendsManager, чтобы он мог получить всех моих друзей (на самом деле непроблема);
  • в FriendsManager создайте экземпляр FriendInfo;
  • дайте ему идентификатор и дайте ему всю необходимую информацию, включая геокодирование родного города;
  • сохраните всеэто с основными данными.

Но тогда, где мне выпустить этот объект?

Чтобы получить всю информацию о друзьях, я бы создал эти объекты в цикле, который проходит через мой массивс идентификаторами друзей.

Я также делаю всю информацию и геокодирование с помощью Grand Central Dispatch, поэтому не знаю, когда FriendInfo получил все необходимые данные и готов.

Ответы [ 2 ]

3 голосов
/ 25 августа 2011

Базовый объект данных обычно является подклассом 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 голосов
/ 25 августа 2011

Проблема, которую вы объясняете, довольно «высокого уровня», и трудно дать конкретный совет.Но в целом вы можете просто использовать ARC и не беспокоиться о большинстве упомянутых проблем управления памятью.

Кроме того, поскольку вы упомянули, что хотите использовать основные данные, вы не выпустите ни одну изобъекты, которые вы хотите сохранить, так как базовые данные сохраняют все объекты контекста, и поэтому они никогда не будут «освобождены» в любом случае.

Предлагаемый вами подход об использовании GeneralManagerClass для извлечения всей информации и заполнения новых экземпляров друзей обычноХОРОШО.Я тоже так делаю, и это заставляет думать относительно легко.

Так что я бы просто начал с этого, а затем задавал более конкретные вопросы.На данный момент я действительно не вижу каких-либо общих трудностей в упомянутых вами проблемах, если вы следуете по предложенному вами маршруту ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...