#objective-c #swift
#objective-c #swift
Вопрос:
Поскольку мы работаем в Objective-c и когда мы хотим освободить или освободить объект, мы можем сделать это, например: NSMutableArray * arr;
[arr removeAllObjects];
arr = nil;
arr = [[NSMutableArray alloc] init];
мы можем освободить этот и тот объект.
Итак, почему нет способа сделать это на языке swift
мы можем сделать только это:
arr.removeAllObjects()
arr = NSMutableArray()
Я не понимаю, как таким образом объект освобождает или освобождает память.
Комментарии:
1. Спасибо за ваш комментарий, мне нужна ваша помощь, пожалуйста, предоставьте мне несколько ссылок или ссылок, чтобы я мог работать с optional и решить проблему
2. В
arr = nil;
опубликованном вами коде Objective-C нет необходимости в строке. И в Swift тоже нет необходимости это делать.
Ответ №1:
Прежде всего, если вы объявите свою переменную как необязательную, вы можете установить для нее значение nil
.
Однако с помощью ARC вам не нужно освобождать объект самостоятельно (для этого и предназначен ARC). Система обработает память для вас, когда вы сбросите переменную.
Комментарии:
1. Правильный термин не «будет обрабатывать», а «должен обрабатывать», ARC не идеален.
2. @AlessandroOrnano В каком случае ARC не будет обрабатывать память (вызов
-release
) при сбросе переменной, если вы не сделаете это вручнуюunowned
?3. @AlessandroOrnano Я не могу с вами не согласиться, но давайте предположим, что в таком простом случае это сработает. В противном случае вы никогда не сможете ему доверять.
4. @kennytm Перейдите в openradar и выполните поиск в некоторых примерах, то же самое иногда происходит в spritekit..