Каждый UIView появляется только один раз, поэтому вам обязательно нужно будет создать 49 его копий.
Ваш текущий код, вероятно, в порядке, так как UIImage, вероятно, кеширует изображение, но вы можете создать изображение только один раз, а затем устанавливать его каждый раз, что-то вроде:
UIImageView* selectedSquareView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,40,40)];
static UIImage* kSelectedSquareImage = [UIImage imageNamed:@"SelectedSquare.png"] retain];
[selectedSquareView setImage:kSelectedSquareImage];
Если нет, я должен хранить их в
NSMutableArray для легкого удаления позже?
Это зависит от того, есть ли другие представления в представлении контейнера - если нет, то нет необходимости сохранять их в NSMutableArray, так как вы можете просто использовать container.subviews для получения массива представлений. Иначе, конечно, вы можете сохранить их в NSMutableArray и удалить их таким образом (просто убедитесь, что вы удалили их из массива или также освободили массив, иначе они останутся в памяти просто потому, что они хранятся в массиве).