2016-05-25 2 views

ответ

1

сильной и слабой помощь с циклами сохраняют высвобождение (RRC), в виде утечки памяти. iOS использует что-то, называемое Automatic Reference Countin (ARC), чтобы знать, когда объект используется, и должен храниться в памяти или больше не используется, и его нужно удалить, чтобы получить обратно ресурсы. ARC работает, потому что среда выполнения знает для каждого объекта, сколько объектов ссылается на него. Когда найденное значение достигнет 0, объект будет удален.

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

Возвращаясь к Сильным и Слабым, эти ключевые слова используются, чтобы «обозначить право собственности», если хотите. Они помогают устранить циклы сохранения-освобождения, ограничив, какие объекты увеличивают счетчик ссылок для другого объекта. Сильное свойство - это то, где вы увеличиваете счетчик ссылок объекта. Если объект A имеет сильную ссылку на B, и ни один другой объект не ссылается на B, B имеет счет 1 (A принадлежит или должен существовать B). Теперь, если B хочет иметь ссылку на A, мы хотели бы использовать слабую ссылку. Слабые ссылки не увеличивают счетчик ссылок объекта. Таким образом, в этом конкретном случае, если A не имеет других объектов, ссылающихся на него, но B, счетчик A будет 0, учитывая слабое указание B.

Вы видите, как это устраняет RRC? Предполагая отсутствие внешних ссылок и не используя сильные/слабые ссылки, A и B будут постоянно находиться в памяти. Используя сильные и слабые ссылки, описанные выше, A будет иметь счет 0, поэтому он будет удален из памяти. Это, в свою очередь, приведет к деинкреции счетчика ссылок B от 1 до 0, в результате чего B будет удален из памяти.

Nonatomic используется для обозначения того, что объект, на который делается ссылка, не защищен потоком. Это означает, что объект не может одновременно обрабатывать несколько запросов. Атоматичность - это идея, что, как только вы делаете запрос, это либо происходит, либо нет. Когда операция является атомарной, вы гарантируете, что объект, к которому вы применяете операцию, никогда не будет находиться в промежуточном состоянии. Независимо от того, как вы смотрите на эту сущность, она либо выглядит так, как прежде, чем вы запрашивали операцию, или она выглядит так, как только она будет выполнена. (Когда мы думаем об атомарности, думаем об атомах, слово означает неделимое. Атомные операции - это те, которые нельзя разделить на более мелкие операции.)

+0

Я не нашел в ответе ответа – Rishi

Смежные вопросы