Вы присваиваете массив переменной exerciseArray
, а затем освобождаете массив. В следующий раз, когда вы попытаетесь получить доступ к переменной exerciseArray
, массив исчезнет, потому что присвоение его переменной exerciseArray
не увеличивает его счетчик хранения.
Число сохраненных объектов массива равно 1 при первом вызове alloc
. Когда вы присваиваете его упражнению ArrayArray, его значение сохранения остается равным 1. Затем, когда вы освобождаете его, его число хранения падает до 0, и вы не можете ожидать, что снова получите доступ к массиву.
Вы не должны освобождать его (мои предпочтения), либо явно сохранять его, вызывая:
[exerciseArray release];
exerciseArray = [sortedArray retain];
[sortedArray release];
Обратите внимание на порядок этих двух сообщений. Первая строка освобождает любой существующий объект, на который указывает переменная exerciseArray
. Вторая строка увеличивает счетчик сохранения нового массива до 2, а вторая затем сбрасывает его до 1, поэтому массив все еще сохраняется. Если вы отпустите sortedArray
до назначения нового массива переменной exerciseArray
, счетчик сохранения станет равным 0, и вы потеряете его, прежде чем сможете присвоить его новой переменной.