Как будет работать управление памятью в классе Model (Swift или задача C) - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть класс модели, который имеет свойства ниже.

@interface CountryModel : NSObject
@property (nonatomic) NSInteger id;
@property (nonatomic, strong) NSString *country;
@property (nonatomic, strong) NSString *dialCode;
@property (nonatomic) BOOL isInEurope;
@end

Я получаю приведенные ниже данные из веб-службы.

{
    "id": 123,
    "country_name": "India",
    "dialCode": "+91"

}

Затем я привязываю значения к массиву. Теперь мой вопрос заключается в том, как управление памятью будет работать длямодельный класс?Потому что есть несколько сильных ссылок.Может кто-нибудь объяснить мне.

1 Ответ

0 голосов
/ 13 ноября 2018

Простой ответ: автоматически (при условии, что вы не отключили ARC)

Чуть более длинный ответ (при условии, что вы не отключили ARC):

Когда вы присваиваете значения свойств country и dialCode экземпляра CountryModel, этот экземпляр будет иметь сильные ссылки на ссылочные значения NSString.

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

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

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

Примечание: если ссылка NSString ссылается на буквенную строку, то сама буквенная строка бессмертна и никогда не будет возвращена.Если вы пытаетесь понять, когда освобождается память, отслеживая использование памяти, отслеживая dealloc вызовы и т. Д. не не используют литеральные строки в качестве тестовых объектов - лучше всего использовать пользовательскийопределенный тип.

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

HTH

Приложение послеcomment

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

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

Может показаться, что это одно и то же, но есть небольшая разница в том, как они рассматриваются: счетчик ссылок принадлежит объекту ;в то время как ссылочный атрибут strong, который утверждает долю владения, является частью принадлежности к ссылочной переменной .

В вашем примере комментария a имеет долю владения в CountryModel объект, на который он ссылается - единственная доля владения, созданная вами для этого объекта.Объект CountryModel имеет доли владения в объектах, на которые ссылаются country и dialcode, но, возможно, не единственные такие заинтересованные стороны - в этом фрагменте мы не знаем, какие другие ссылочные переменные утверждают долю владения в этих объектах.ссылка на две переменные.

Позже, когда вы создаете temparray ссылка на объект, хранящаяся в a, копируется в массив и temparray заявки и доля владения указанным объектом CountryModel - в то время как aпродолжает отстаивать свою собственную долю собственности.Итак, теперь у вас есть две переменные, которые вы создали, утверждая долю владения в объекте CountryModel.

Аналогичное объяснение применимо к b & c.

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

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

HTH больше, чем смущает!

...