Вы должны выделить место для массива, вы возвращаете адрес массива, который был создан в стеке (следовательно, предупреждение о локальной переменной), если вы используете C, в этой функции используйте malloc (my_arr_size), если не используете obj -c's alloc.
Пример:
int *my_arr = calloc(10, sizeof(int)); //make sure we get zeroed memory
//fill array
return my_arr; //should no longer give a warning
Когда закончите, просто используйте free (my_arr) так же, как и release. Причина, по которой я сделал это в C, заключается в том, что я вижу, что вы возвращаете тип int * и используете объявления стиля C, поэтому, если вы делаете это в Obj-c, дайте мне знать, и я могу изменить пример моего ответа.
Причина, по которой вы получаете эту ошибку, заключается в том, что локальные массивы помещаются в стек; когда вы возвращаете этот массив, вы возвращаете адрес в кадре стека. Проблема заключается в том, что когда этот метод заканчивает выполнение, этот стековый фрейм становится недействительным, и поэтому вы не можете ожидать, что любые данные, которые были в этом фрейме, будут действительными (хотя бывают случаи, когда это работает, но это считается плохой практикой). Выделив этот массив в куче, вы можете возвращать адрес кучи, где ваши данные гарантированно существуют, пока вы не вызовете free () для указателя на эти данные.