Для гуру Objective-C:
Предположим, у меня есть простой метод, подобный так:
-(id)getValue{ return [NSNumber numberWithDouble:5.0]; }
Теперь предположим, что в каком-то другом методе я вызываю метод getValue (id) следующим образом:
NSNumber* myValue = [self getValue];
или что, если я вместо этого назову это так:
NSNumber* myValue = (NSNumber*)[self getValue];
Вопрос: очевидно, что эти строки эквивалентны, но одна из них использует явное приведение. Так каков правильный или лучший способ сделать это? Мне кажется, что приведение не является необходимым, поскольку, когда оно помещено в указатель myValue, оно в любом случае будет безопасным с точки зрения типов (что я и хочу), поэтому приведение в принципе бессмысленно.
Позвольте мне просто добавить, что я уверен, что люди укажут: почему бы вам просто не вернуть (NSNumber *) из метода getValue, но в моем случае я хочу иметь возможность возвращать все, что я хочу, так же, как встроенный в NSDictionary класс возвращает id при вызове: objectForKey, потому что он позволяет помещать в него любой тип NSObject или подкласс. Другими словами, мой метод getValue не всегда будет возвращать NSNumber. Также подумайте, что этот пример надуман, потому что я просто обеспокоен тем, следует ли разыгрывать или нет.
Заранее спасибо,
-Ральф