feb19.jp blog - life is creative!

iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する

ブックマークに追加する tags:   

iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する

Objective-C では、高位のフレームワークで、低位のフレームワークのクラスを「カテゴリ」の仕組みを利用することにより、拡張することができます。このとき、低位のフレームワークに上位のフレームワークが影響を及ぼす事無くクラスを拡張することができます。(のメモ)

たとえば Objective-C で文字列を扱うにはNSString というクラスを使用します。
NSString クラスは Mac OS でも使用可能な、低レベルレイヤーの Foundation フレームワークで定義されているクラスです。
iPhone SDK では、この NSString の文字列を iPhone の画面上に表示するメソッド「drawAtPoint:location withFont:font」が用意されています。

// 画面上に Hello World と表示します。
UIFont *font = [UIFont fontWithName:@"HiraKakuProN-W3" size:14.0f];
NSString *str = @"Hello World.";
[str drawAtPoint:CGPointMake(0, 0) withFont:font];

このメソッドは iPhone SDK に存在する、UIKit という高レベルレイヤーのフレームワークが、「カテゴリ」の仕組みを使用して NSString を「拡張」しています。

一般的にクラスを拡張するには、オブジェクト指向の世界では「サブクラス化」が一般的です。Objective-C ではそれに加え、カテゴリによるメソッドの追加という方法があり、サブクラス化の問題点「既存のインスタンスを拡張できない」「メソッド呼び出しのオーバーヘッドが増える」「型が変わってしまう」などを解決しています。

カテゴリは Obejctive-C が、クラスへメソッドの動的な追加ができるようになっているために使用可能になっています。

Objective-C のオープンソースライブラリなどでは、文字列操作用のライブラリの場合、「StringUtils」などのクラスを作るのではなく、NSString をカテゴリで拡張しているのが多く見られます。

カテゴリで既存のクラスを拡張した場合のファイル命名規則は「既存のクラス名+"+"+カテゴリ名」が一般的です。


サンプル:文字列から空白文字を除去するための機能を NSString に追加する

XML や JSON の安全なパースの際には空白文字(や、改行文字)を除去します。

// NSString+TrimWhiteSpace.h
@interface NSString (TrimWhiteSpace)
- (NSString *) stringByTrimmingWhitespace;
@end
// NSString+TrimWhiteSpace.m
#import “NSString+TrimWhiteSpace.h”
@implementation NSString (TrimWhiteSpace)
- (NSString *) stringByTrimmingWhitespace
{
	return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
@end

使用方法

NSString *original = @”Hello World”;
NSString *trimmed = [original stringByTrimmingWhitespace];


この機能は使用しているコードがスマートになるので、 ActionScript にもほしいと思ってしまいます。 AS2 ならば prototype とかで MovieClip に独自プロパティとか独自メソッドを追加できたものですが。

参考:Categories: Modifying Existing Classes in Objective-C | NumberGrinder
http://www.numbergrinder.com/node/40

2010年01月25日11:06

Webデザインブログ

「iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する」の関連エントリー

 iTunes Store(Japan)

コメントを投稿

トラックバック

このエントリーのトラックバックURL:
http://feb19.jp/mt/mt-tb.cgi/187

Navigation

古:Flash CS4 で Flex SDK (mx パッケージ、クラス) を使う
新:AS3 の演算子 ||= について
トップページ

Recently Entries
Mac でファイルの関連付けを変える(Mac で AIR アプリがアップデート出来ないを解決する方法)
ファイルを右クリックして「情報を見る」を選び、表示されたウィンドウの...
Mac OS X 10.6 Snow Leopard から入ってるフォント「Menlo」がコーディング作業にいい感じ
Xcode でコード書いているとき、Eclipse でコード書くより...
AIR で JSON 形式ファイルの入出力
AIR 祭り開催中。今回はファイル入出力。AS3 で扱っている Ob...
Adobe CS5 ティザーサイトオープン
カウントダウンが始まっています。いよいよ CS5 ですね。globa...
AIR でファイルがドラッグアンドドロップされたことを NativeDragEvent で検知する
最近また AIR が楽しい気がして触っているのですが、 Google...
iPhone アプリ "iBeat - BPM Counter" を発売しました & iPhone インタラクションデザインについて
BPM 計測アプリです。既に似たようなアプリはいくつか発売されている...
AS3 の演算子 ||= について
AS3 だけでつかえるものではないのですが、AS3 での動作を確認し...
iPhone SDK 「カテゴリ」について+NSString の空白文字を除去する
Objective-C では、高位のフレームワークで、低位のフレーム...
Flash CS4 で Flex SDK (mx パッケージ、クラス) を使う
Flex 用のライブラリとかを見ると mx パッケージとか使われてい...
Flash CS5 を予習 ~Text Layout Framework (TLF) 編~
Text Layout Framework (TLF) を使って、F...