2016-06-10 2 views
3

Можно ли вручную удалить содержимое объекта из памяти?Как я могу вручную обнулить память?

В частности, я имею дело с NSData. Я пробовал использовать data.length = 0 и data.setData(NSData).

Я знаю, что ARC войдет и очистится после того, как он выходит из сферы действия, к которому он принадлежит, но можно ли вручную принудительно выполнить этот процесс, когда захочу?

ответ

3

Я думаю, что у вас есть некоторые заблуждения относительно ARC. Я бы хотел прояснить ситуацию. Цель ARC заключается в том, чтобы избежать утечки памяти. Он отвечает за отслеживание объекта в течение его жизненного цикла и обеспечение его «освобождения», когда ссылки на него не остаются.

Важно отметить, что память, «освобожденная», не подразумевает «запись всего этого с помощью 0s».

Это просто означает, что память будет обозначаться как неиспользованная. Свободная память становится кандидатом на выделение, когда системе необходимо выделить память для новых объектов.

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

+0

Так что даже после взятия объекта и перезаписи содержимого самого '.setdata (nsdata())' это не гарантирует, что фактическая память будет перезаписана новым значением? Или вы имеете в виду, когда вы разрешаете объекту полностью? –

+0

Я не знаю, какой метод 'setdata' вы говорите, но, скорее всего, он обновляет внутреннюю переменную экземпляра получателя, которая содержит ссылку на NSData. Установка нового значения для него приведет к тому, что ARC освободит старый объект NSData, с которым он ссылался (если ничего не ссылается на этот объект NSData), но нет никакой гарантии, что он будет обнулен. – Alexander

+0

NSMutableData SetData() - https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableData_Class/#//apple_ref/occ/instm/NSMutableData/setData: –

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