Существует ли структура данных Очереди/FIFO для iPhone?

Шифрование легко: как другие указали, в Системе существуют классы. Безопасность. Пространство имен криптографии, которые делают всю работу для Вас. Используйте их, а не любое решение собственной разработки.

, Но дешифрование легко также. Проблемой, которую Вы имеете, не является алгоритм шифрования, но доступ защиты к ключу, используемому для дешифрования.

я использовал бы одно из следующих решений:

  • DPAPI использование класса ProtectedData с объемом CurrentUser. Это легко, поскольку Вы не должны волноваться о ключе. Данные могут только быть дешифрованы тем же пользователем, таким образом отрицательный результат для обмена данными между пользователями или машинами.

  • DPAPI использование класса ProtectedData с объемом LocalMachine. Хороший для, например, защищающий данные конфигурации на единственном защищенном сервере. Но любой, кто может войти в машину, может зашифровать ее, таким образом отрицательный результат, если сервер не безопасен.

  • Любой симметричный алгоритм. Я обычно использую статический SymmetricAlgorithm. Создайте () метод, если я не забочусь о том, какой алгоритм используется (на самом деле, это - Rijndael по умолчанию). В этом случае необходимо защитить ключ так или иначе. Например, можно запутать его в некотором роде и скрыть его в коде. Но знайте, что любой, кто достаточно умен для декомпиляции кода, вероятно, будет в состоянии найти ключ.

9
задан George Armhold 9 July 2009 в 13:51
поделиться

4 ответа

Реализовать очередь на основе NSMutableArray довольно просто, вероятно, меньше 50 строк кода.

РЕДАКТИРОВАТЬ:

Нашел это с помощью быстрого поиска в Google:

@interface Queue:NSObject {
   NSMutableArray* objects;
}
- (void)addObject:(id)object;
- (id)takeObject;
@end

@implementation Queue

- (id)init {
   if ((self = [super init])) {
       objects = [[NSMutableArray alloc] init];    
   }
   return self;
}

- (void)dealloc {
    [objects release];
    [super dealloc];
}

- (void)addObject:(id)object {
   [objects addObject:object];
}

- (id)takeObject  {
   id object = nil;
   if ([objects count] > 0) {
       object = [[[objects objectAtIndex:0] retain] autorelease];
       [objects removeObjectAtIndex:0];
   }
   return object;
}

@end
10
ответ дан 4 December 2019 в 13:04
поделиться

Какао сам по себе не имеет класса Queue, и нет стандарта как такового, но есть несколько вариантов, один из которых может лучше всего соответствовать вашим потребностям. См. этот вопрос мой ответ ).

Как вы сказали, вы можете использовать собственный NSMutableArray. Если вам просто нужна быстрая очередь (и вы не беспокоитесь о копировании, кодировании / декодировании, перечислении и т.д.), то решение, которое предлагает @Matt, является простым подходом. Вам также следует рассмотреть возможность добавления методов очереди в NSMutableArray через категорию , что приятно тем, что ваша «очередь» также является массивом (так что вы можете передавать ее для параметров NSArray) и вы получаете все функции NS (Mutable) Array бесплатно.

Если производительность важна, Я рекомендую использовать структуру, более подходящую для удаления первого элемента. Я написал CHCircularBufferQueue для своего собственного фреймворка именно по этой причине. (Не пытаюсь гудеть в свой рог, просто пытаюсь сэкономить время другим.)

5
ответ дан 4 December 2019 в 13:04
поделиться

Я создал категорию, содержащую только deque, основанный на коде Мэтта Бриджеса.

@interface NSMutableArray (ShiftExtension)
// returns the first element of self and removes it
-(id)shift;
@end

@implementation NSMutableArray (ShiftExtension)
-(id)shift {
    if([self count] < 1) return nil;
    id obj = [[[self objectAtIndex:0] retain] autorelease];
    [self removeObjectAtIndex:0];
    return obj;
}
@end
1
ответ дан 4 December 2019 в 13:04
поделиться

Вы можете использовать очередь STL из стандартной библиотеки C++.

0
ответ дан 4 December 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: