Почему язык swift не может предоставить nil для освобождения или освобождения памяти

#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..