У вас есть это:
jokesArray = [[NSArray alloc]init];
Отдельно у вас есть это:
jokesArray = [resultsDictionary allValues];
Второй вызов, вызывающий allValues, выделяет совершенно новый jokesArray.Тот, который вы уже распределили, теперь потерян (при условии, что jokesArray не является сохраняемым свойством), и вы должны освободить его перед повторным назначением через строку allValues.
Причина, по которой вам нужно «сохранить» послевызов allValues происходит потому, что память, выделенная в allValues, будет помечена для автоматического выпуска.Если вы хотите, чтобы эта память оставалась (и, похоже, так и есть), вам нужно сохранить ее.Тогда ваш вызов release в viewDidUnload должен кое-что освободить, а ваши другие ссылки на jokesArray (например, вызов count) имеют некоторую память, с которой нужно действовать.
Переключение на использование сохраненного свойства избавит вас от всех этих хлопот.