是否有iPhone的队列/ FIFO数据结构?

Geo*_*old 9 iphone queue data-structures

在我使用自己的队列之前NSMutableArray,我想知道是否有更多可用的标准.我没有在Apple文档中看到任何内容,但如果没有人们使用的某个地方没有Queue实现,我会感到惊讶.Java破坏了我!

Mat*_*ges 10

基于NSMutableArray它实现队列非常简单,可能不到50行代码.

编辑:

通过快速谷歌搜索找到这个:

@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
Run Code Online (Sandbox Code Playgroud)


Qui*_*lor 5

Cocoa本身没有Queue类,并且本身没有标准,但有几个选项,其中一个可能最适合您的需求.看到这个问题(和我的回答).

就像你说的,你可以使用NSMutableArray自己动手.如果你只需要一个quick'n'dirty队列(并且不担心复制,编码/解码,枚举等),那么@Matt建议的解决方案是一种简单的方法.您还应该考虑通过类别添加队列方法NSMutableArray,这很好,因为您的"队列"也是一个数组(因此您可以为NSArray参数传递它),并且您可以免费获得所有NS(Mutable)数组功能.

如果性能很重要,我建议使用更适合删除第一个元素的结构.出于这个原因,我为自己的框架编写了CHCircularBufferQueue.(不是试图嘟嘟我自己的号角,只是试图挽救他人一段时间.)