Обычно при написании метода, который возвращает вновь созданный объект (как в вашем примере), вы должны возвращать автоматически освобожденный объект. Таким образом, в соответствии с соглашением, ваш код будет выглядеть так:
NSMutableSet* returnSet = [[NSMutableSet alloc] init];
for (Information* currentInformation in self.information) {
if ([currentInformation.player isEqual:aPlayer]) {
[returnSet addObject:currentInformation];
}
}
return [returnSet autorelease];
Обратите внимание, что вы можете вернуть свой изменяемый набор из метода, даже если ваша сигнатура метода задает NSSet, поскольку NSMutableSet является подклассом NSSet. Когда вы используете этот метод, если вы не хотите, чтобы возвращаемый объект оставался без присмотра, просто ничего не делайте, и он будет освобожден. Если вы хотите, чтобы он был доступен позже, присвойте его переменной-члену и сохраните ее или поместите в другую сохраненную структуру данных (набор, словарь, массив).
Обновление
Чтобы устранить некоторую путаницу в правильности этого ответа, обратитесь к разделу «Возвращение объектов из методов» по адресу http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html.