Я очищаю свой код в приложении для телефонной книги iPhone, и инструмент «Утечки» в Инструментах сообщает, что я пропускаю объекты NSCFString. Вот образец, по которому я следую:
В моем приложении есть класс Person, в котором есть только локальные члены NSString и связанные свойства для имени, фамилии и т. Д.
Мой контроллер представления имеет свойство NSMutableArray, которое заполняется из базы данных SQLite в событии searchBarSearchButtonClicked. Этот NSMutableArray заполнен объектами Person, которые будут использоваться для заполнения моего элемента управления tableview. Кроме того, если пользователь нажимает на человека в представлении, его объект Person будет передан в подробное представление для просмотра дополнительной информации, а не только имени.
При первом поиске и отображении результатов нет утечек памяти.
Теперь, когда я выполняю свой второй поиск, в идеале я хотел бы очистить NSMutableArray и перезагрузить его с новым набором результатов без утечки памяти. Итак, чтобы сделать это, я вызываю removeAllObjects для моего свойства personList, а затем вызываю базу данных для повторного заполнения personList NSMutableArray, как показано ниже:
[self.personList removeAllObjects];
self.personList = [SearchService GetPersonList:searchText];
[list reloadData];
Вызвав removeAllObject, я избавился от утечек, которые у меня были, которые были связаны с объектами Person. Тем не менее, похоже, что теперь я вытекаю из объектов NSString, оставшихся от свойств отдельных объектов Person.
Возможно ли это?
Я новичок в инструменте Instruments, но из того, что я могу сказать из Расширенной детали, когда углубляюсь в одну из утечек NCSFString, является то, что последняя строка кода в стеке часто указывает на строку кода @synthesize для свойство, такое как:
@synthesize firstName;
Итак, вот почему я думаю, что эти строки NSS не очищаются. Есть ли лучший способ сделать это, что не вызывает утечки памяти?