Скажем, у меня есть свойство, объявленное как @property (nonatomic, strong) NSArray *menuArr;
ИЛИ @property (strong) NSArray *menuArr;
, и установите это свойство в viewDidLoad
. Как долго устройство будет «помнить» информацию, которую я храню в массиве?
Свойство объявляется и устанавливается в viewController, который встроен в navigationViewController, который сам является первым контроллером представления в TabBarViewController. Другими словами, это первое представление, которое видит пользователь, после чего он может перейти от него и обратно.
Не вдаваясь в дискуссию об атомном и неатомном, мой вопрос:
Продолжается ли свойство (объявленное в любом случае) бесконечно в среде iOS или его срок службы ограничен такими факторами, как время, использование памяти в другом месте, выключение устройства и т. д.
Чтобы это не превратилось в "проблему x y", я спрашиваю:
Я работаю над приложением, которое включает в себя меню, разбитое на несколько категорий с несколькими элементами в каждой категории ... как и следовало ожидать от меню. Все пункты меню хранятся на parse.com. Сначала я делал отдельный PFQuery на каждой странице, один на странице категорий, чтобы получить категории, когда пользователь выбирает категорию, нажимается новая страница, а второй PFQuery получает все элементы в выбранной категории. Это сработало, но страницы загружались довольно долго, вероятно, иногда 10-15 секунд без каких-либо реальных указаний на то, что приложение просто не зависло.
Чтобы исправить это, я решил запустить один PFQuery, когда первое представление приложения загружается в viewDidLoad
, получая все элементы меню и сортируя себя по вложенным массивам категорий, содержащих элементы. Затем я сохраняю массив меню в свойстве viewController. Позже, когда я захожу в меню, у меня есть viewDidLoad
:
//get e reference to the first view controller, the one that has the menu array
FirstViewController *myVC1ref = (FirstViewController *)[[[self.navigationController.tabBarController.viewControllers objectAtIndex:0] viewControllers] objectAtIndex:0];
//set thisviewController's `menuArr` property to point to the menuArr on the first viewController.
_menuArr=myVC1ref.menuArr;
Насколько я понимаю, это создает указатель на исходный массив и на самом деле не создает второй массив (пожалуйста, поправьте меня, если я ошибаюсь).
Этот метод занимает около 10-15 секунд для загрузки и сортировки массива один раз, но тогда навигация между страницами происходит мгновенно после этого, что намного лучше.
Я планирую делать запросы в местах, чтобы увидеть, были ли изменены какие-либо пункты меню, и если да, повторно загрузить и отсортировать меню.
Пока что в моем тестировании приложение, кажется, прекрасно запоминает информацию в массиве в течение дня при обычном несвязанном использовании телефона, но должны быть некоторые ограничения для этого, верно?