В отличие от C или C ++, где вы постоянно беспокоитесь о том, удалять ли объект или нет, так как боитесь, что он все еще используется где-то еще, Objective-C (точнее, это вообще-то Cocoa SDK) использует механизм подсчета ссылок или владение.
Вы, возможно, уже знаете, как это работает, но вам также необходимо знать, что в Какао, если объекту A нужно использовать другой объект B, он должен владеть (т.е. сохранять) его. Этот объект A не должен полагаться на какой-либо другой объект C, уже сохранивший B, потому что он не может знать, когда C освобождает его. Так что в вашем случае, поскольку NSArray должен использовать все объекты, добавленные к нему последними в течение своего времени жизни, ему необходимо сохранить все объекты. И из-за этого, когда массив де-распределен, он должен освободить их.
Эта концепция «вам нужно сохранить то, что вы хотите использовать последним», очень важна, когда вы имеете дело с большим количеством объектов.