Ваш метод должен установить для массива значение autorelease, а затем вызывающая сторона должна сохранить возвращенный массив. Таким образом, метод больше не отвечает за массив, вызывающая сторона.
Объекты в массиве будут сохранены NSMutableArray, поэтому вы должны установить для них автоматическое освобождение, чтобы они не протекали.
- (NSMutableArray*) calleeMethod
{
// this method is retaining the array temporarily
// someone else is responsible for retaining it
NSMutableArray * newArray = [[[NSMutableArray alloc] init] autorelease];
// add some objects
for (int i = 0; i < 10; i++)
{
// autorelease these objects because newArray will retain each item and
// is responsible for the items
FooObject * newFooObject = [[[FooObject alloc] initWithNumber:i] autorelease];
[newArray addObject:newFooObject];
}
return newArray;
}
- (void) callerMethod
{
// retain the returned array, because we own it
mNewArray = [[self calleeMethod] retain];
// do stuff
// make sure you explicitly release mNewArray later (probably in the dealloc)
}