Сильная и слабая путаница в iOS

Я немного запутался в использовании Strong или Weak в моем конкретном случае.

У меня есть один класс ParentClass который имеет 3 object ContainerClass1 , ContainerClass2 и ContainerClass3 .

Каждый ContainerClass имеет свои собственные свойства с Mutable объектами, такими как NSMutableArray

Теперь в моем случае я должен показывать только один ContainerClass за раз, поэтому, если ContainerClass1 показан, ContainerClass2 и ContainerClass3 не требуются.

Поэтому я подумал, когда я покажу ContainerClass1 , установит объекты ContainerClass2 и ContainerClass3 на nil . Здесь я смущен, будет ли просто устанавливать другой ContainerClass (не показан) на nil чтобы release его память? потому что они обладают сильными свойствами для других объектов.

Или мне нужно сначала установить все остальные свойства ContainerClass's в nil а затем установить ContainerClass в nil ?

Заранее спасибо.

@zoeb, эта ссылка поможет вам избежать проблем с основной памятью.

как к преодолению-памяти-проблемы-в-iPhone-приложений-с-автоматической ССЫЛКА подсчета

Отредактировано:

Поскольку мы знаем, что Apple представила ARC в IOS 5.0, ARC – это функция уровня компилятора, которая упрощает процесс жизни объектов объектива-c. Перед введением ARC мы управляли памятью вручную – «Ручной подсчет ссылок (MRC)». В MRC разработчику необходимо помнить, когда выпустить или сохранить объект. Означает, что Разработчику необходимо управлять жизненным циклом объектных объектов.

По мнению разработчиков, мы в основном заинтересованы в добавлении новых функций в наше приложение, а не в решении проблем с памятью. Но все уверенно, что управление памятью играет решающую роль в успехе приложения. Чтобы предоставить помощь разработчику, Apple определила способ автоматического управления памятью.

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

Вот некоторые шаги, которые вам необходимо реализовать в каждом контроллере.

Шаг 1. Объявите слабое свойство для каждого элемента управления пользовательского интерфейса, который используется в приложении.

Пример :
@property (nonatomic, weak) IBOutlet UIButton* btnPost;

 @property (nonatomic, weak) IBOutlet UITableView* tblMessages; 

и т.п.

Шаг 2. Согласно нашему разработчику, наиболее запутанный вопрос заключается в том, позволяет ли компилятор объявить метод «dealloc» в базовом приложении ARC. ответ да, но не разрешено объявлять «[super dealloc]» внутри него. поэтому переопределите метод «dealloc» в каждом контроллере.

 -(void)dealloc{ } 

Шаг 3. Удалите тяжело нагруженный объект из супервизора в методе «dealloc», а затем установите только «нулевую» ссылку, такую ​​как MKMapview, ScrollView и т. Д.

 -(void)dealloc{ dictAddress = nil; arrayList = nil; [map removeFromSuperview]; [scrollView removeFromSuperview]; } 

Шаг 4. Избегайте механизма блокировки. (Пример: класс A и класс B. Класс B объявлен делегатом с типом свойства «Сильный», так что класс A и класс B, зависящие друг от друга на одном, будут выпущены, поэтому в этом случае метод «dealloc» не вызываемый ни одним из классов, поэтому этот класс хранится в памяти. Чтобы удалить такие случаи, нам нужно сохранить ссылку «Назначить» для объекта Delegate.) Это, например, только. Нам нужно учитывать и другие вещи, такие как «Сохранять слабую ссылку для блока, чтобы он освобождал объекты после завершения выполнения».

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

Ниже ссылка поможет вам проанализировать память.

Анализатор Мамори

Путаница между сильными и слабыми будет понятна с помощью ссылки ниже.

Различия между сильными и слабыми в Objective-C

Interesting Posts

Анимировать изменение границы CALayer

cellForRowAtIndexPath: UILabel перекрывается после прокрутки

Символическое сбой для файла 7.1.1 .ips crash в Xcode 5.1.1

Информация о пользователе в адресной книге на iOS

Определите, произошло ли изменение дня

Анимация popoverContentsize при нажатии контроллера навигационного представления в popover на iPad

Как программно настроить цвет подсветки UIButton?

пользовательский сеттер для NSString

NSKeyedUnarchiver initForReadingWithData: непонятный сбой архива

Слайд в UITableViewCells при прокрутке

Не удается получить push-уведомление в iOS из тем Firebase 3.2.0

Плагин iOS cordova: Как отправить результат плагина из плагина iOS в javascript в фоновом потоке

Каково приемлемое средство, при котором приложение может отображать строку состояния с двойной высотой, а именно: строка состояния «в вызове»

Swift – отклонение контроллера просмотра из блока завершения

Is _UIImagePickerControllerUserDidCaptureItem – это частный API UIImagePickerController?

Давайте будем гением компьютера.