Прежде всего, вы не должны полагаться на счет сохранения, потому что когда вы передаете объект какому-либо методу, все может произойти с этим объектом, как, например, кто-то его удерживает, снова автоматически выпускает его, передает его другому методу и т. Д.Таким образом, значение является очень неточным.
Но здесь, в вашем случае, счет сохранения (по крайней мере) +1 является правильным, потому что вы хотите, чтобы ваше изображение оставалось живым после того, как вы добавили его как подпредставление дляelementView
, поэтому [element addSubview:imageView]
сохраняет представление вашего изображения (добавляя +1 к количеству сохраняемых данных), а затем вы снова отпускаете его (оставляя +1 от alloc init).
Причина, по которой вы получаете исключениес закомментированным кодом вы создаете автоматически выпущенный объект для cellBackImag
, а затем освобождаете его.После того, как ваш метод вернется, в какой-то момент пул авто-выпуска снова выпустит образ, и там он потерпит крах.
Так что в основном просто придерживайтесь второго подхода (alloc, init, add, release) и забудьте осохранить счет.Если вас беспокоят утечки памяти, вам следует взглянуть на Instruments, который является отличным инструментом для поиска всевозможных ошибок.