フルスクリーン化で使用しているクラス(3)

2010. 06. 20
●NSObjectクラス

NSObjectは、ほとんどのObjective-Cクラス階層のルートクラスです。

NSObjectを通して、オブジェクトはランタイムシステムの基本インターフェイスを継承し、Objective-Cのオブジェクトして動作します。

セレクタ

NSObjectは、Objective-Cランタイムシステムを利用したいくつかの特別なメソッドを持っています。

例えば、特定のメソッドを呼び出す前にメッセージが応答した場合、クラスまたはインスタンに求めることができます。

また、perform~メソッドの一つを使ってメソッドの実装と呼び出しを求めることができます。

関数として呼び出すこともできますが、動的バインディングを回避するので通常は推奨しません。

これらおよび他のNSObjectメソッドは、引数としてSEL型のセレクタを取ります。

効率化のため、コンパイルしたコードでのメソッドは、完全なASCII名で表されません。

代わりに、ランタイムでのセレクタによるメソッドの呼び出しには、コンパイラはユニークな識別子を使います。

セレクタのメソッド名は、@selector()ディレクティブを使って取得できます。

SEL method = @selector(isEqual:);

instanceMethodForSelector:クラスメソッドとmethodForSelector:インスタンスメソッドはIMP型のメソッドの実装を返します。

IMPはidを返し、可変個の引数を取る関数のポインタとして定義されています。
(加えて、全てのメソッドの実装で、2つ『隠し』引数(selfと_cmd)渡します)

typedef id (*IMP)(id, SEL, ...);

この定義は、これらのメソッドが返す関数ポインタのプロトタイプとして利用できます。

それはオブジェクトを返し、オブジェクトの引数を取得するのに十分なメソッドです。

しかしセレクタが異なる引数型を取る、またはid以外を返す場合、その関数が不十分なプロトタイプになります。

欠けたプロトタイプの場合、コンパイラは実数を倍精度、文字を整数とみなすので予測できない実装になります。

したがって、メソッドが異なった(間違った)実行をします。

このような状況を解決するには、必要に応じて自身のプロトタイプを提供することです。

以下の例では、isEqual:メソッドの実装をプロトタイプで提供したtest変数の宣言しています。

testは関数のポインタとして定義され、BOOL値を返し、idの引数(と2つの隠し引数)を取ります。

戻り値はmethodForSelector:で返され、次に同じ関数の型のポインタにキャストされます。

BOOL (*test)(id, SEL, id);
test = (BOOL (*)(id, SEL, id))[target methodForSelector:@selector(isEqual:)];

while ( !test(target, @selector(isEqual:), someObject) ) {
    ...
}

いくつかの場合、変数の宣言とmethodForSelector:が返す関数ポインタをキャストするために、(IMPに似た)型を明確に定義することができます。

以下の例は、この目的のためにEqualIMP型を定義します。

typedef BOOL (*EqualIMP)(id, SEL, id);
EqualIMP test;
test = (EqualIMP)[target methodForSelector:@selector(isEqual:)];

while ( !test(target, @selector(isEqual:), someObject) ) {
    ...
}

いずれにせよ、methodForSelector:の戻り値は適切な関数の型にキャストすることが重要です。

methodForSelector:が返す関数を単に呼び出し、呼び出した結果を目的の型にキャストするだけでは不十分です。

そうすると、結果でエラーがでます。

詳細は『Objective-C Runtime Programming Guide』の『Messaging』を参照してください。


●UIApplicationクラス

UIApplicationクラスは、iPhone OS上でのアプリケーションの動作の制御と調整の、一元的な管理を提供します。

全てのアプリケーションは、UIApplication(またはUIApplicationのサブクラス)のインスタンスを必ず一つ持つ必要があります。

アプリケーションが起動するとUIApplicationMain関数を呼び出し、他のタスクとは独立したシングルトンのUIApplicationオブジェクトを生成します。

その後sharedApplicationクラスメソッドでオブジェクトを呼び出し、アクセスすることができます。

UIApplicationオブジェクトの重要な役割は、入力されたユーザイベントの初期経路の処理を行うことです。

またコントロールオブジェクト(UIControl)によって、アクションメッセージを適したターゲットオブジェクトに送ります。

さらにUIApplicationオブジェクトは、アプリケーションが現在開いている全てのウィンドウ(UIWindowオブジェクト)のリストを保持し、それらを介してアプリケーションのUIViewオブジェクトを取得することができます。

アプリケーションオブジェクトは通常デリゲートを割り当てており、アプリケーションの重要なランタイムイベント(例えば、アプリケーションの起動、メモリ不足の警告、アプリケーションの終了など)の応答を適時通知します。

アプリケーションは、openURL:メソッドを介して電子メールまたは画像ファイルといったリソースを協調処理できます。

例えば、アプリケーションがこのメソッドを使って、電子メールのURLからメールクライアントの起動とメッセージの表示を行うこともできます。

iPhone OS 3.0ではUIApplicationにリモート通知を登録するメソッドが追加され、アンドゥ/リドゥUI(applicationSupportsShakeToEdit)のトリガや、インストールされたアプリケーションでURLを開くかどうかを決定する(canOpenURL:)などがあります。

UIApplicationはデリゲートを定義しており、一つ以上のメソッドを実装したUIApplicationDelegateプロトコルを採用する必要があります。

またUIApplicationとUIApplicationDelegateのプログラムインターフェイスは、デバイス固有の動作を管理することができます。

アプリケーションでデバイスの向きによるインターフェイスの変更や、ユーザイベント入力の一時停止、ユーザの顔を検出する近接センサによるオン/オフなどの制御ができます。

サブクラス化の注意

カスタムイベントとアクションディスパッチを実装するには、UIApplicationをサブクラス化して、sendEvent:またはsendAction:to:from:forEvent:をオーバーライドします。

しかし多くの場合、クラスよりアプリケーションデリゲートを拡張した方が有効です。

UIApplicationをサブクラス化する場合、サブクラスで達成しようとしていることを熟考してみてください。



参考文献

NSObject Class Reference

UIApplication Class Reference

Cocoaリファレンス日本語化計画/NSObject Class Reference

福井高専IT研究会OfficialWiki/UIApplication

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 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 31 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Wave SoundTouch music system IV
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR