我正在编写一个iPhone应用程序,我很惊讶Apple的Foundation Framework中似乎没有NSQueue或NSStack类.我看到从NSMutableArray开始自己滚动很容易,所以除非我错过了什么,否则我会这样做.我错过了什么吗?
Tom*_*ert 28
这是我的Stack类,以防它对那些追随我的人有用.正如您所看到的,pop方法涉及足够的代码,您需要将其分解出来.
Stack.h:
#import <Foundation/Foundation.h>
@interface Stack : NSObject {
NSMutableArray *contents;
}
- (void)push:(id)object;
- (id)pop;
@end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Mic*_* W. 22
据我所知,没有通用类avaialbe.尝试使用NSMutableArray,通过addObject添加并通过objectAtIndex和removeObjectAtIndex获取第一个/最后一个.
我参加这个派对有点晚了,但是你知道CHDataStructures吗?
http://cocoaheads.byu.edu/code/CHDataStructures
另一种简单的方法是NSMutableArray通过使用Objective C的类别来扩展其功能.您可以通过向项目添加两个文件来实现:
NSMutableArray里+ Stack.h
@interface NSMutableArray (StackExtension)
- (void)push:(id)object;
- (id)pop;
@end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现在,您可以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);
Run Code Online (Sandbox Code Playgroud)
日志输出将是:
hello universe
hello world
Run Code Online (Sandbox Code Playgroud)
我在GitHub上放了一个有效的iOS Objective C队列对象.代码来自各个职位,绝不是我拥有的.
https://github.com/esromneb/ios-queue-object/
如果你看到任何问题请叉,并提出拉动请求!
| 归档时间: |
|
| 查看次数: |
27525 次 |
| 最近记录: |