Ко второй части вашего вопроса проще обратиться, поэтому я подойду к первому.
Динамическое создание экземпляра объекта произвольного класса во время выполнения можно выполнить с помощью NSClassFromString()
Предполагая, что ваш WaterTile является подклассом UIView (что, кажется, имеет смысл, так как он, вероятно, будет нарисован на экране)
UIView *newTile = [[NSClassFromString([NSString stringWithFormat:@"%@TileView", [@"water" capitalizedString]]) alloc] init];
Теперь для первой части.
Учитывая, чтоПлитка - это то, что вы хотите нарисовать на экране, вы извлечете выгоду из всего совершенства ОО, унаследовав от UIView, который будет реагировать на сенсорные события и иметь методы, необходимые для позиционирования и рисования.Это основное преимущество перед использованием структуры для ваших плиток.
Скорее всего, абстрактный класс Tile, о котором вы думаете, действительно не понадобится, так как большинство свойств и методов, предоставляемых UIView, заставляет меня думать, что вы, возможно, захотите определить Tile @protocol
вместо.
@protocol TileViewDrawing
- (void)drawThinking;
@end
@interface WaterTileView : UIView <TileViewDrawing>
@end
@implementation WaterTileView
-(void)drawThinking
{
// Code to show rippling effect
}
@end
Чтобы создать двумерные массивы в вашем Map
, определите NSArray
(столбцы) NSArrays
(строка)