Несколько вещей:
: при создании объектов всегда используйте метод init. (т.е. [[NSObject alloc] init])
: объекты добавляются в AutoreleasePool после их автоматического освобождения. Объекты в этом примере просто освобождаются и поэтому не будут использовать пулы автоматического выпуска вообще. Вы можете увидеть это, удалив все пулы авто-релиза; код все еще работает нормально.
: в первом примере будет утечка памяти. Вы выделяете два объекта и никогда не отпускаете. Если бы вы выполнили их автоматическое освобождение, то, вероятно, вы бы получили то поведение, которое искали, и утечки не было бы.
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray* myObj = [[[NSObject alloc] init] autorelease];
myObj = [[[NSObject alloc] init] autorelease];
[pool release];
: Пример 2 работает, потому что вы просто размещаете, а не освобождаете объекты; ни один из которых не использует пул autorelease. Вы можете удалить код автоматического выпуска, чтобы увидеть это.
: мне не удалось воспроизвести поведение, которое вы видите в примере 3. Возможно, внутри вашего кода происходит что-то еще.