NSObject クラスリファレンス (翻訳元)
このページの最終更新:2010-02-12
ADCの最終更新:2009-08-28
ADCの最終更新:2009-08-28
継承するクラス | なし(このクラスはルートクラスです) |
準拠しているプロトコル | NSObject |
フレームワーク | /System/Library/Frameworks/Foundation.framework? |
使用可能な環境 | Mac OS X 10.0以降 |
コンパニオンガイド | Cocoa Fundamentals Guide |
宣言ファイル | NSArchiver.h NSClassDescription.h NSKeyedArchiver.h NSObject.h NSObjectScripting.h NSPortCoder.h NSRunLoop.h NSScriptClassDescription.h NSThread.h |
サンプルコード | CoreRecipes? From A View to A Movie? From A View to A Picture? ImageClient? Sketch+Accessibility? |
概観(Overview)
NSObjectはObjective-Cクラス階層におけるほとんどのクラスのルートクラスです。NSObjectクラスを通して、オブジェクトはランタイムの基本的インターフェースと、Objective-Cオブジェクトとして振る舞う能力を継承します。
セレクタ(Selectors)
NSObjectにはObjective-Cランタイムを活用する為の特別なメソッドがあります。例えば、クラスやインスタンスが特定のメソッドに反応するかを呼び出す前に知ることができます。また、perform...メソッドなどを使って、メソッドの実装を呼び出すことができます。動的バインドを使えないので通常は推奨されませんが、メソッドの実装を関数のように呼び出すこともできます。
これらやこのクラスの他のメソッドはSEL型を引数にとります。効率化の為に、コンパイル後のコードではメソッドを表すのにASCIIのフルネームが使われることはありません。代わりに、コンパイラは、ランタイムではセレクタと呼ばれるユニークな識別記号を使います。メソッドのセレクタは@selector()ディレクティブを使って得ることができます。
これらやこのクラスの他のメソッドはSEL型を引数にとります。効率化の為に、コンパイル後のコードではメソッドを表すのにASCIIのフルネームが使われることはありません。代わりに、コンパイラは、ランタイムではセレクタと呼ばれるユニークな識別記号を使います。メソッドのセレクタは@selector()ディレクティブを使って得ることができます。
SEL method = @selector(isEqual:); |
instanceMethodForSelector:クラスメソッドとmethodForSelector:インスタンスメソッドはIMP型のメソッドの実装を返します。IMP型はid型を戻り値に持ち、可変数(それに加えてすべてのメソッドに渡される、二つの「暗黙の」引数selfと_cmd)の引数をとる関数ポインタとして定義されています。
typedef id (*IMP)(id, SEL, ...); |
この定義はこれらのメソッドが返す関数ポインタのプロトタイプとして使用します。これはオブジェクトを引数と戻り値に持つメソッドには十分です。しかし、セレクタがid型以外の引数や戻り値を持つ場合、この型の関数はプロトタイプには適しません。適切なプロトタイプがなければ、コンパイラはfloatをdoubleに、charをintにして扱おうとします。これは実装が予期しないことであり、呼ばれるメソッドは異なった(誤った)働きをするでしょう。
これを回避する為には、独自のプロトタイプを提供する必要があります。以下の例では、test変数の宣言でisEqual:メソッドの実装のプロトタイプを提供しています。test変数はBOOL型を返し、id型(それに加え2つの「暗黙の」引数)を引数に持つ関数ポインタとして定義されています。methodForSelector:メソッドが返す値は同じ型の関数ポインタにキャストされています。
これを回避する為には、独自のプロトタイプを提供する必要があります。以下の例では、test変数の宣言でisEqual:メソッドの実装のプロトタイプを提供しています。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:が返した関数を呼んで、その戻り値を目的の型にキャストするだけでは不十分です。そうすることで、エラーが発生することもあります。
採用しているプロトコル(Adopted Protocols)
NSObject – autorelease – class – conformsToProtocol: – description – hash – isEqual: – isKindOfClass: – isMemberOfClass: – isProxy – performSelector: – performSelector:withObject: – performSelector:withObject:withObject: – release – respondsToSelector: – retain – retainCount – self – superclass – zone
このクラスでできること(Tasks)
クラスの初期化(Initializing a Class)
+ initialize + load
オブジェクトの作成、複製、削除(Creating, Copying, and Deallocating Objects)
+ new + alloc + allocWithZone: – init – copy + copyWithZone: – mutableCopy + mutableCopyWithZone: – dealloc – finalize
クラスの識別(Identifying Classes)
+ class + superclass + isSubclassOfClass:
クラス機能の確認(Testing Class Functionality)
+ instancesRespondToSelector:
準拠するプロトコルの確認(Testing Protocol Conformance)
+ conformsToProtocol:
メソッド情報の取得(Obtaining Information About Methods)
– methodForSelector: + instanceMethodForSelector: + instanceMethodSignatureForSelector: – methodSignatureForSelector:
オブジェクトの記述(Describing Objects)
+ description
ポージング(Posing)
+ poseAsClass: Deprecated in Mac OS X v10.5
(Discardable Content Proxy Support)
– autoContentAccessingProxy
メッセージ送信(Sending Messages)
– performSelector:withObject:afterDelay: – performSelector:withObject:afterDelay:inModes: – performSelectorOnMainThread:withObject:waitUntilDone: – performSelectorOnMainThread:withObject:waitUntilDone:modes: – performSelector:onThread:withObject:waitUntilDone: – performSelector:onThread:withObject:waitUntilDone:modes: – performSelectorInBackground:withObject: + cancelPreviousPerformRequestsWithTarget: + cancelPreviousPerformRequestsWithTarget:selector:object:
メッセージ転送(Forwarding Messages)
– forwardingTargetForSelector: – forwardInvocation:
メソッドの動的解決(Dynamically Resolving Methods)
+ resolveClassMethod: + resolveInstanceMethod:
エラー操作(Error Handling)
– doesNotRecognizeSelector:
アーカイブ化(Archiving)
– awakeAfterUsingCoder: – classForArchiver – classForCoder – classForKeyedArchiver + classFallbacksForKeyedArchiver + classForKeyedUnarchiver – classForPortCoder – replacementObjectForArchiver: – replacementObjectForCoder: – replacementObjectForKeyedArchiver: – replacementObjectForPortCoder: + setVersion: + version
クラス記述の補助(Working with Class Descriptions)
– attributeKeys – classDescription – inverseForRelationshipKey: – toManyRelationshipKeys – toOneRelationshipKeys
アップルスクリプト(Scripting)
– classCode – className – copyScriptingValue:forKey:withProperties: – newScriptingObjectOfClass:forValueForKey:withContentsValue:properties: – scriptingProperties – setScriptingProperties: – scriptingValueForSpecifier:
クラスメソッド
alloc
クラスの新しいインスタンスを返します。
+ (id)alloc
戻り値
+ (id)alloc
戻り値
- クラスの新しいインスタンス。
解説
- 新しいインスタンスのisaインスタンス変数はクラスを表す構造体データに初期化されます。また、その他のインスタンス変数の領域は0で初期化されます。新しいインスタンスはデフォルトのゾーンに確保されます。特定のゾーンに確保することを明確にしたいときはallocWithZone:メソッドを使ってください。
- init...メソッドは初期化処理を完了するために必ず使用されなければなりません。以下に例を示します。
TheClass *newObject = [[TheClass alloc] init]; |
- サブクラスは初期化コードを含める為にallocメソッドをオーバーライドするべきではありません。代わりに、クラス特有のinit...メソッドを使用するべきです。newメソッドによく似た、生成と初期化を統合したクラスメソッドを作ることもできます。
特に気をつけること
- メモリ管理(ガベージコレクションではない)を使用している場合、このメソッドは保持されたオブジェクトを返します。このオブジェクトはリファレンスカウンタが1で自動解放されません。このメソッドの呼び出し元はreleaseやautoreleaseメソッドを使ってこのオブジェクトを解放する義務があります。
使用可能な環境
- Mac OS X v10.0以降
関連項目
- - init
関係のあるサンプルコード
宣言しているファイル
- NSObject.h