Предоставляет ли IOS SDK очереди и стеки?

Я пишу приложение для iPhone, и я удивлен тем, что в Apple Foundation Framework нет классов NSQueue или NSStack. Я вижу, что было бы довольно легко сворачивать самостоятельно, начиная с NSMutableArray , поэтому я сделаю это, если не упустил что-то. Я что-то пропустил?

насколько я знаю, нет универсального класса avaialbe. Попробуйте использовать NSMutableArray, добавьте через addObject и получите first / last через objectAtIndex и removeObjectAtIndex.

Вот мой класс Stack, если это полезно для тех, кто идет за мной. Как вы можете видеть, поп-метод включает в себя достаточно кода, который вы бы хотели его исключить.

Stack.h:

#import <Foundation/Foundation.h> @interface Stack : NSObject { NSMutableArray *contents; } - (void)push:(id)object; - (id)pop; @end 

Stack.m

 #import "Stack.h" @implementation Stack // superclass overrides - (id)init { if (self = [super init]) { contents = [[NSMutableArray alloc] init]; } return self; } - (void)dealloc { [contents release]; [super dealloc]; } // Stack methods - (void)push:(id)object { [contents addObject:object]; } - (id)pop { id returnObject = [[contents lastObject] retain]; if (returnObject) { [contents removeLastObject]; } return [returnObject autorelease]; } @end 

Я немного опаздываю на эту вечеринку, но знаете ли вы о CHDataStructures?

http://cocoaheads.byu.edu/code/CHDataStructures

Другим простым способом было бы расширить возможности NSMutableArray используя категории Objective C. Вы можете сделать это, добавив два файла в ваш проект:

NSMutableArray + Stack.h

 @interface NSMutableArray (StackExtension) - (void)push:(id)object; - (id)pop; @end 

NSMutableArray + Stack.m

 #import "NSMutableArray+Stack.h" @implementation NSMutableArray (StackExtension) - (void)push:(id)object { [self addObject:object]; } - (id)pop { id lastObject = [self lastObject]; [self removeLastObject]; return lastObject; } @end 

Теперь вы можете использовать обычный NSMutableArray в каждом другом файле вашего проекта, например стек, и вызывать push или pop на этом объекте. Не забывайте #import NSMutableArray+Stack.h в этих файлах. Вот пример кода, в котором вы можете использовать новый NSMutableArray как стек:

 NSMutableArray *myStack = [[NSMutableArray alloc] init]; // stack size = 0 NSString *aString = @"hello world"; [myStack push:myString]; // stack size = 1 NSString *anotherString = @"hello universe"; [myStack push:anotherString]; // stack size = 2 NSString *topMostStackObject; topMostStackObject = [myStack pop]; // stack size = 1 NSLog("%@",topMostStackObject); topMostStackObject = [myStack pop]; // stack size = 0 NSLog("%@",topMostStackObject); 

Выход журнала будет:

 hello universe hello world 

Я поставил на объект GitHub рабочий объект объекта Object Object Object iOS. Код был взят из разных постов и никоим образом не принадлежит мне.

https://github.com/esromneb/ios-queue-object/

Если вы видите какие-либо проблемы, пожалуйста, используйте вилку и сделайте запрос на тяну!

Да, NSMutableArray удваивается как стек или очередь. (Это будет немного неэффективно, как очередь).

Вы также можете использовать C ++- stack и адаптер queue , но он делает управление памятью немного беспорядочным, если вы хотите сохранить объекты Objective-C с ним.

ObjectiveSugar – очень популярный CocoaPod, который предоставляет среди множества отличных вещей push и pop API вызывает NSMutableArray . Конечно, это не в SDK для iOS, но я делюсь им здесь, потому что я искал то же самое, и это было решение, с которым я пошел (и это, конечно, не помешало, что мы уже использовали этот CocoaPod в нашей кодовая).

Нет. Вы ничего не пропустили. Это все. Objective-C – язык более высокого уровня, похожий на C. Низкий уровень контроля не требуется.

Классы какао предназначены для более легкого использования, чем эффективность. Если вы хотите иметь дело с производительностью, у вас есть опция реализации C (или C ++). В противном случае просто используйте простой способ. Конечно, ранняя оптимизация – это зло.

Если вы хотите своего рода инкапсуляцию, просто создайте новый класс, содержащий внутри него NSMutableArray. Скрывайте внутренний NSMutableArray и просто показывайте, что хотите. Но вы поймете, что это не нужно.

Давайте будем гением компьютера.