Хотя Карл и прав, это почти точно то, что вы не хотите делать.
А именно, в Какао или iOS исключительно редко передаются значения по ссылке с целью их дистанционного обновления.,Помимо того, что он хрупок и подвержен ошибкам, он также обычно является нарушением инкапсуляции, фундаментальным принципом ОО.
Учитывая контекст, кажется, что вы делаете какое-то приложение типа бейсбола?Предположим, что так.
Таким образом, у вас есть класс Lineup
, экземпляры которого представляют состав команды (возможно, даже класс команды, экземпляры которого представляют отдельные команды), причем каждая команда управляет составом экземпляров Player
.
Итак, у вас может быть что-то вроде:
@interface Lineup:NSObject
- (BOOL) substitutePlayer: (Player *) sub;
@end
И вы можете назвать это так:
- (void)handleResult:(Result)result
forPlayer:(Player *)player
inLineup:(Lineup *)lineup
{
... handle substituion ...
[lineup substitutePlayer: player];
}
И вы можете реализовать substitutePlayer:
как:
- (BOOL) substitutePlayer: (Player *) playerToReplace;
{
NSUInteger *index = [self.players indexOfObject: playerToReplace];
[self.players replaceObjectAtIndex: index withObject: [self.substitutes objectAtIndex: 0]];
[self.substitues removeObjectAtIndex: 0];
return YES;
}
Делая это, вы избегаете глупостей (Player **)
и инкапсулируете все манипуляции со строками внутри класса.Если вам когда-нибудь понадобится специализировать состав - скажем, -substitutePlayer:
должен использовать последнего парня в self.substitutes
- вы можете создать подкласс Lineup
и сделать это.
Конечный результат;намного более чистый ОО-дизайн, гораздо более простой в обслуживании код и гораздо менее хрупкие шаблоны.
(Исправлены некоторые глупые ошибки из-за кодирования в окне редактирования SO).