Первый блок кода в порядке. Однако второй блок не оставляет вам массива, который вы можете использовать, поэтому его недостаточно. Половину исправления этого блока, я думаю, вы имеете в виду:
myArr = nil;
myArr = [[NSMutableArray alloc] init....];
Однако, это также не выполняет то, что вы хотите, потому что вы не выпускаете myArr. Если вы синтезировали установщик для myArr, то вы можете получить желаемое поведение при выпуске от установки до nil, используя setter (self.myArr) вместо прямого доступа к указателю (myArr). Полностью исправляя свой второй блок:
self.myArr = nil;
myArr = [[NSMutableArray alloc] init....];
Теперь у нас есть эквивалентные примеры кода, один из которых использует setter с nil для освобождения, другой нет. Они одинаковы.
Если myArr является изменяемым массивом, как в этих примерах, самый эффективный метод - это использовать removeAllObjects, избегая всей работы по освобождению памяти только для ее возврата:
[myArr removeAllObjects];