Не было бы лучшего способа сделать это с помощью Objective-C / Foundation, кроме создания собственного класса, такого как NumberPair
или чего-то, что вы помещаете в массив вместо использования NSValue
и * 1003. *. Это может быть немного более эффективно для использования памяти, и вы можете сделать так, чтобы NumberPair
содержал два целых числа, а не числа с плавающей запятой, как вас беспокоит. Что-то вроде:
@interface NumberPair : NSObject
@property (nonatomic, assign) int x;
@property (nonatomic, assign) int y;
@end
@implementation NumberPair
@synthesize x, y;
@end
...
m_queue = [NSMutableArray array];
NumberPair *newPair = [[NumberPair alloc] init];
newPair.x = 1;
newPair.y = 2;
[m_queue addObject:newPair];
...
NumberPair *nextPoint = [m_queue objectAtIndex:0];
[m_queue removeObjectAtIndex:0];
[self queueFloodFill8:nextPoint.x y:nextPoint.y];
Кроме этого, вы могли бы сделать более похожую на C вещь, имеющую struct
, содержащую два целых числа, создать динамически распределенный массив для хранения структур (вам необходимо знать максимальный размер очереди или продолжать перераспределение ). Что-то вроде:
typedef struct {
int x;
int y;
} NumberPair;
NumberPair *m_queue = (NumberPair*)malloc(sizeof(NumberPair) * QUEUE_SIZE);
// ... etc
Кроме того, вы можете проверить мой класс MJGStack , который обертывает NSMutableArray
, чтобы обеспечить интерфейс, подобный стеку, который вы, возможно, сможете немного настроить, чтобы делать то, что вы хотите, вместо использования NSMutableArray
непосредственно. Хотя это не важно.