Вы в первую очередь владеете sportName, отправляя alloc (или new, copy, mutableCopy, retain). Теперь у вас есть свежий экземпляр, который вы должны выпустить позже.
stringByAppendingString возвращает автоматически выпущенную строку, которую вы присваиваете sportName. Ссылка потеряна и никогда не может быть выпущена.
Посмотрите на адреса памяти:
NSString *sportName = [[NSString alloc ]initWithString:@"baa"];
NSLog(@"<%p> %@", sportName, sportName);
sportName = [sportName stringByAppendingString:@" foo"];
NSLog(@"<%p> %@", sportName, sportName);
Выход:
2011-05-20 08:19:08.675 foo[1262:207] <0x3038> baa
2011-05-20 08:19:08.677 foo]1262:207] <0x4e40bd0> baa foo
имя спортсмена было перезаписано.
Вы можете исправить это, введя tmp или используя строковый литерал:
NSString *sportName = @"baa";
или
...
NSString *tmp = [sportName stringByAppendingString:@" foo"];