Хорошо, основы.
Большинство методов, которые создают объекты, возвращают объекты, которые были выделены, затем «автоматически выпускаются».
Вызов autorelease добавляет ваш объект в "пул autorelease", что означает, что они получат вызов release в следующий раз, когда ваше приложение посетит цикл событий.
Когда вы используете автоматически выпущенные объекты, вы можете использовать их, а затем забыть о них. Они освобождаются автоматически.
Исключением, как уже говорили другие, являются вызовы с именем "init" или "new" или вызовы методов "copy". Эти методы возвращают объекты, которые не были автоматически освобождены. Владелец этих объектов должен освободить или автоматически освободить эти объекты, чтобы их можно было освободить и не вызвать утечку памяти.
В вашем примере кода вы создаете объекты buttonImage и button с помощью вызовов + imageNamed и + buttonWithType.
Это вызовы класса, которые возвращают объект нужного типа. Поскольку они не содержат в именах слов «init» или «new», возвращаемые ими объекты уже автоматически высвобождаются, поэтому вы НЕ должны их освобождать.
Вы передаете создаваемое изображение кнопке, поэтому кнопка сохраняет изображение. Затем вы передаете объект кнопки вашему объекту viewBasicItems с помощью вызова -addSubview, поэтому представление сохраняет кнопку.
Таким образом, вы не должны больше ничего делать. Кнопка сохранит изображение, а вид сохранит кнопку.
Надеюсь, это поможет.