はてなブックマークに追加

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
はてなブックマークに追加

Objective-Cでアンドゥスタック

iPhoneアプリのUndo機能は、命令をスタックに積むかたち実現します。 しかし画像処理ソフトなど、頻繁に命令をスタックに積む必要があるアプリの場合、 無制限にスタックを伸ばすとメモリが足らなくなってしまいます。

そこでキャパシティを超えるプッシュがきた場合には、始めに入れた命令から消していくような スタックを使用します。要するに、基本的な動作はスタックですが、 容量を超えた場合だけキューの動作を行うハイブリッドスタックを使おう、というわけです。

このアンドゥスタックはNSMutableArrayにカテゴリで機能追加を行うことで実装しています。
カテゴリの説明はこちら。Objective-Cのカテゴリ

HybridStack.h
@interface NSMutableArray (HybridStack)
- (id) pop;
- (void) push:(id)obj;
@end


HybridStack.m
@implementation NSMutableArray (RignBuffer)
- (id) pop 
{
	if( [self count] == 0) return nil;
	
	id obj = [self objectAtIndex:[self count]-1];
	if (obj != nil) {
		[[obj retain] autorelease]; 
		[self removeObjectAtIndex:[self count]-1];
	}
	return obj;
}

- (void) push:(id)anObject 
{
	if( [self count] >= 5 ){
		[self removeObjectAtIndex:0];		
	}
	
	[self addObject:anObject];	
}
@end
スポンサーサイト

コメントの投稿

非公開コメント

開発アプリ

iDOF 色影 ラテアート ぱすてる

プロフィール

hokuson

Author:hokuson
京都在住。iPhoneアプリ「色影」や「iDOF」の開発者。アプリのレビューとかもしてみる。博士後期課程@R大学。ついに就職活動なるものをしなければいけないらしい。誰か雇ってください。笑。

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
カテゴリ
最新コメント
RSSリンクの表示
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。