У меня есть UITableView как мой первый экран с контроллером UINavigation.
В моем первом экране я NSLog(@"Home Screen retain Count=%d",[self retainCount]); и он регистрирует 6, когда вызывается его viewDidLoad.
Правильно ли это?
Ответ 1
KeepCount - это количество претензий на право собственности на объект.
Вы получаете право собственности на объект, если его создаете с помощью метода, имя которого начинается с "alloc" или "new" или содержит "copy" (например, alloc, newObject или mutableCopy), или если вы отправляете сохранить сообщение. Все они увеличивают значение keepCount.
Вы отказываетесь от владения с использованием "выпуска" или "авторекламы". Эти декременты сохраняются.
Однако вы никогда не должны обращать внимания на ценность saveCount, это в лучшем случае запутывает, в худшем случае вводит в заблуждение. Просто следуйте правилам управления памятью - возьмите собственность, когда вам нужно сохранить ссылку на объект и отказаться от права собственности, когда вы закончите, и у вас не будет проблема.
Если вы смотрите на saveCount, вы делаете неправильный путь, и вы просто будете путать себя дальше.
Ответ 2
Звучит отлично. Почему это было бы неправильно?
В общем, попытка определить вещи из счета удержания - плохая идея. Нет никаких правил о количестве раз, когда вы можете сохранить объект. Единственное правило состоит в том, что каждое сохранение должно быть сбалансировано с выпуском.