Давайте посмотрим, что делает ваш код, чтобы понять, что происходит:
UITextField* txtField = [arr objectAtIndex i];
, что делает копию значения в массиве, и значения в качестве NSMutableArray
являются ссылки, и сохраняет это значение в переменной txtField
. Поскольку txtField
определен, неявно, чтобы удерживать сильные ссылки, ARC (с учетом любых оптимизаций) регистрирует право собственности на ссылку (ака «сохранить»). Ваша следующая строка:
txtField = nil;
сохраняет ноль эталонного значения в txtField
. Поскольку txtField
содержит сильные ссылки, любой магазин заставляет ARC отказаться от доли владения (иначе «релиз») в предыдущем ссылочном значении, хранящемся в переменной.
Массив никогда не изменяется. Вы повторили его содержимое, скопировали каждое значение, сохранили это значение, выпустили это значение. Наконец, вы пишете:
arr = nil;
, который хранит ноль эталонное значение в arr
. Поскольку arr
содержит сильные ссылки, любой магазин заставляет ARC отказаться от доли владения (иначе «релиз») в предыдущем ссылочном значении, хранящемся в переменной, - и это предыдущее значение было вашей ссылкой на ваш NSMutableArray
.Если нет других владельцев массива, он уничтожается, и когда массив уничтожается, он отказывается от своего владения любыми значениями, которые он содержит, что в данном случае является вашими UITextField
экземплярами, а если нет другого владельца, то они разрушен ...
Так самое все, что вам нужно:
arr = nil
но вы можете даже не нужно. Поскольку arr
содержит сильные ссылки, когда его время жизни заканчивается - в конце блока или метода, содержащего его объявление, если локальная переменная или когда экземпляр уничтожается, если переменная экземпляра - тогда ARC откажется от своей доли владения и т. Д.
HTH
Хорошо. В этом есть смысл. Спасибо за помощь. – user1087185