Сохранить и самостоятельно с NSMutableArray - PullRequest
2 голосов
/ 29 июля 2010

В моем .h файле у меня есть NSMutableArray * locationArray, определенный со свойством следующим образом

@property (nonatomic, retain) NSMutableArray *locationsArray

В моем .m файле я отображал табличное представление, это нормально загружалось, пока я не попытался свернутьв этот момент я потерпел крах с плохим доступом.Это произошло из-за того, что locationArray не был сохранен.

Эта строка кода исправила мою проблему в .m

locationsArray = [[Locations loadLocations] retain] (#1)

Эта строка кода также исправила ту же проблему

self.locationsArray = Locations.loadLocations (#2)

У меня есть пара вопросов, которые мне нужно уточнить по

  1. . Это правильный способ установить это значение, если я делаю alloc init, alloc initwithArray?
  2. Исходя из мира Java, я понимаю, self это, или, по крайней мере, я думал, что сделал ... Что отличается в цели C, что locationsArray без self не сохраняется без менядобавление удержания.

Очевидно, я заработал, но это заняло некоторое время, и я все еще немного сбит с толку относительно того, почему.любая помощь будет оценена.

1 Ответ

1 голос
/ 29 июля 2010
  1. Да, если вы устанавливаете переменную экземпляра (locationArray) напрямую, вам нужно сохранить значение, чтобы сохранить его. Вы можете сделать это так, как вы это сделали, или распределить / инициализировать это напрямую, что также означает, что вы сохраняете за собой право собственности.

  2. self действительно эквивалентно this в других языках OO. Но в Obj-C есть семантическое различие между ссылкой на ивара «голый», как в первом примере, и ссылкой на self.locationsArray во втором. Первый ведет себя так, как вы себе представляете, но последний на самом деле является синтаксическим ярлыком для [self setLocationsArray: ... ], который автоматически сохраняет вас, поскольку вы пометили свойство как retain.

Этот последний пункт действительно тонкий, и (на мой взгляд) не ожидаемое или очевидное поведение. Если вы все еще не уверены, вернитесь к документации Apple. Очень важно получить это.

...