NSObject(protocol)
継承:なし
従属:なし
フレームワーク:iOS 2.0 以降の Foundation。関連項目
概要(NSObject,protocol)
すべてのObjective-Cオブジェクトの基本である NSObject のプロトコルグループのメソッド。
注意: このプロトコルは、NSObjectProtocol と言う名前で Swift にインポートされています。
オブジェクトがこのプロトコルに準拠している場合、それはファーストクラスのオブジェクトとみなすことができる。このようなオブジェクトは、以下のものについて訊ねることができます。
- クラス、および継承階層内のそのクラスの場所
- プロトコルへの準拠
- 特定のメッセージに応答する能力
ココアのルートクラス、NSObject は、このプロトコルを採用しており、そのように NSObject から継承するすべてのオブジェクトはこのプロトコルによって説明する能力を持っています。
Tasks(タスク)
クラスの識別
– class 必須
受信者のクラスのクラスオブジェクトを返します。
宣言
<< OBJECTIVE-C >>
- (Class)class
戻り値
受信者のクラスのクラスオブジェクト。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
使用可能
iOS 2.0 以降で利用できます。
以下も参照
class(NSObject class)
– superclass 必須
受信者のスーパークラスのクラスオブジェクトを返します。
宣言
<< SWIFT >>
var superclass: AnyClass? { get } << OBJECTIVE-C >> @property(readonly) Class superclass
戻り値
受信者のスーパークラスのクラスオブジェクト。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
使用可能
iOS 8.0 以降で利用できます。
以下も参照
superclass(NSObject class)
オブジェクトの識別と比較
– IsEqual: 必須
受信者と与えられたオブジェクトが等しいかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func isEqual(_ object: AnyObject?) -> Bool << OBJECTIVE-C >> - (BOOL)isEqual:(id)anObject
パラメーター
anObject | 受信者に比較されるべきオブジェクト。もし nil の場合、このメソッドは NO を返します。 |
戻り値
受信者と anObject が等しい場合は YES、そうでなければ NO。
議論
このメソッドは、インスタンスが同じであるとは何を意味するのかを定義します。例えば、その対応するオブジェクトが isEqual: の要求に全て YES を応答した場合、コンテナオブジェクトは、2つのコンテナを同じと定義できます。このメソッドの使用例についてはNSData、NSDictionary、NSArray、NSString のクラスの仕様を参照してください。
二つのオブジェクトが等しい場合は、同じハッシュ(hash) 値を持たなければなりません。この最後の点は、もしサブクラスで isEqual: を定義し、コレクションにそのサブクラスのインスタンスを配置するつもりの時、特に重要です。また、そのサブクラスで hash を定義していることを確認して下さい。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
使用可能
iOS 2.0 以降で利用できます。
以下も参照
– hash 必須
ハッシュテーブル構造体のテーブルアドレスとして使用できる整数を返します。
宣言
<< SWIFT >>
var hash: Int { get } << OBJECTIVE-C >> @property(readonly) NSUInteger hash
戻り値
ハッシュテーブル構造体のテーブルアドレスとして使用できる整数。
議論
二つのオブジェクトが等しい(IsEqual: メソッドによって決定される)場合、それらは同じハッシュ値を持たなければなりません。サブクラスで hash を定義し、コレクションにそのサブクラスのインスタンスを配置する場合、この最後の点は特に重要です。
変更可能なオブジェクトがコレクションに加わり、コレクション内のオブジェクトの位置を決定するためにハッシュ値を使用した場合、オブジェクトがコレクション内にある間は、オブジェクトの hash メソッドが返す値は変わってはなりません。そのため、hash メソッドはオブジェクトの内部状態の情報に依存してはならないし、オブジェクトがコレクション内にある間は、必ず、オブジェクトの内部状態情報が変化しないようにしなければなりません。したがって、例えば、変更可能な辞書をハッシュテーブルに入れることができますが、そこにある間、あなたはそれを変更してはなりません。(与えられたオブジェクトがコレクション内にあるかどうかを知ることは困難な場合がありますので注意してください。)
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
使用可能
iOS 8.0 以降で利用できます。
以下も参照
- IsEqual:– self 必須
受信者を返します。
宣言
<< SWIFT >>
func `self`() -> Self << OBJECTIVE-C >> - (instancetype)self
戻り値
受信者。
利用可能
iOS 2.0 以降で利用できます。
以下も参照
オブジェクトの継承、動作、および適合性をテスト
– isKindOfClass: 必須
受信者が、与えられたクラスのインスタンスであるか、あるいはそのクラスから継承する全てのクラスのインスタンスであるかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func isKindOfClass(_ aClass: AnyClass) -> Bool << OBJECTIVE-C >> - (BOOL)isKindOfClass:(Class)aClass
パラメーター
aClass | テストされる Objective-C のクラスを表す Class オブジェクト。 |
戻り値
受信者が、aClass のインスタンスか、または aClass から継承する全てのクラスのインスタンスである場合には YES、そうでなければ NO。
議論
たとえば、このコードでは、isKindOfClass: は、YES を返すが、Foundation では NSArchiver クラスは NSCoder から継承するからである。
- NSMutableData *myData = [NSMutableData dataWithCapacity:30];
- id anArchiver = [[NSArchiver alloc] initForWritingWithMutableData:myData];
- if ( [anArchiver isKindOfClass:[NSCoder class]] )
-         ...
クラスクラスタに代表されるオブジェクトに対して、このメソッドを使用する場合は注意してください。なぜなら、クラスクラスタの性質上、取得するオブジェクトが常に予想される型ではありません。クラスクラスタを返すメソッドを呼び出すと、メソッドによって返されるまさにその型は、そのオブジェクトで何ができるかの最良の指標です。例えば、メソッドが NSArray オブジェクトへのポインタを返す場合は、以下のコードに示すように、配列が変更可能であるかどうかを確認するために、このメソッドを使用するべきではありません。
- // DO NOT DO THIS!
- if ([myArray isKindOfClass:[NSMutableArray class]])
- {
-         // Modify the object
- }
コード内でこのような構築物を使用する場合は、オブジェクトを変更するのは大丈夫だと思っても、実際には変更されないかもしれません。そうすることで、オブジェクトが変更されないと予想される他のコードの問題を引き起こす可能性があります。
受信者がクラスオブジェクトである場合、もし aClass が同じタイプの Class オブジェクトである場合 YES を返し、それ以外の場合、NO を返します。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
以下も参照
- isMemberOfClass:– isMemberOfClass: 必須
受信者が、与えられたクラスのインスタンスであるかどうかを示すブール値を返します。
宣言
func isMemberOfClass(_ aClass: AnyClass) -> Bool << OBJECTIVE-C >> - (BOOL)isMemberOfClass:(Class)aClass
パラメーター
aClass | テストされるべき Objective-C クラスを表す Class オブジェクト。 |
戻り値
受信者が、aClass のインスタンスである場合 YES、それ以外の場合 NO。
議論
たとえば、以下のコードでは、isMemberOfClass: は NO を返します。
- NSMutableData *myData = [NSMutableData dataWithCapacity:30];
- id anArchiver = [[NSArchiver alloc] initForWritingWithMutableData:myData];
- if ([anArchiver isMemberOfClass:[NSCoder class]])
-         ...
Class オブジェクトは、コンパイラが作成したオブジェクトかもしれませんが、それらはまだ、会員(membership) の概念をサポートしています。このように、受信者が特定のクラスのオブジェクトであることを確認するために、このメソッドを使用できます。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
以下も参照
isKindOfClass:– respondsToSelector: 必須
受信者が実装したり、指定したメッセージに応答できるメソッドを継承するかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func respondsToSelector(_ aSelector: Selector) -> Bool << OBJECTIVE-C >> - (BOOL)respondsToSelector:(SEL)aSelector
パラメーター
aSelector | メッセージを識別するセレクタ。 |
戻り値
受信者が実装し、または、aSelector に応答できるメソッドを継承している場合 YES、それ以外の場合 NO。
議論
NO の応答がエラーと見なされるべきであるか否かを決定する責任がアプリケーションにはあります。
オブジェクトに respondsToSelector: を super キーワードを使用して送信することによって、そのスーパークラスからオブジェクトがメソッドを継承するかどうかをテストすることはできません。このメソッドは、スーパークラスの実装だけではなく、全体としてのオブジェクトをまだテストします。したがって、respondsToSelector: を super に送信するのは、self に送信するのと同じです。代わりに、NSObject のクラスメソッド instancesRespondToSelector: を直接オブジェクトのスーパークラスに、以下のコードに示すように起動する必要があります。
- if( [MySuperclass instancesRespondToSelector:@selector(aMethod)] ) {
-         // invoke the inherited method
-         [super aMethod];
- }
利用可能
iOS 2.0 以降で利用できます。
以下も参照
forwardInvocation:(NSObject クラス)
instancesRespondToSelector:(NSObject クラス)
– conformsToProtocol: 必須
受信者があたえられたプロトコルに準拠しているかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func conformsToProtocol(_ aProtocol: Protocol) -> Bool << OBJECTIVE-C >> - (BOOL)conformsToProtocol:(Protocol *)aProtocol
パラメーター
aProtocol | 特定のプロトコルを表すプロトコル・オブジェクト。 |
戻り値
受信者が、aProtocol に準拠しているなら YES、そうでなければ NO。
議論
このメソッドは、NSObject の中で宣言された conformsToProtocol クラスメソッドと全く同じに動作します。インスタンスがメッセージの与えられたセットに応答できるかどうかを調べるために、クラスオブジェクトを取得する必要がないように、便宜(コンビニエンス)のために提供されています。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
使用可能
iOS 2.0 以降で利用できます。
オブジェクトを記述
– description 必須
受信者の内容を説明する文字列を返します。
宣言
<< SWIFT >>
var description: String { get } << OBJECTIVE-C >> @property(readonly, copy) NSString *description
戻り値
受信者のコンテンツを説明する文字列。
議論
このメソッドは、オブジェクトのテキスト表現を作成するために使用されます。フォーマットされた文字列の例は:
- ClassName *anObject = <#An object#>
- NSString *string = [NSString stringWithFormat:@"anObject is %@",anObject];
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
使用可能
iOS 8.0 以降で利用できます。
以下も参照
- debugDescription– debugDescription
デバッガでのプレゼンテーションのため受信者のコンテンツを説明する文字列を返します。
宣言
<< SWIFT >>
optional var debugDescription: String { get } << OBJECTIVE-C >> @property(readonly, copy) NSString *debugDescription
戻り値
デバッガでのプレゼンテーションのため受信者のコンテンツを説明する文字列。
議論
デバッガの印刷-object コマンドは、オブジェクトのテキスト記述を生成するためにこのメソッドを呼び出します。
NSObject は description(記述)メソッドに至るまで呼び出して、このメソッドを実装します。したがって、デフォルトでは、オブジェクトのデバッグ記述は、その記述と同じです。しかし、これらを分離したい場合は、debugDescription をオーバーライドすることができます。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
使用可能
iOS 5.0 以降で利用できます。
以下も参照
– descriptionメッセージの送信
– performSelector: 必須
受信者に指定されたメッセージを送信し、メッセージの結果を返します。
宣言
<< SWIFT >>
func performSelector(_ aSelector: Selector) -> Unmanaged<AnyObject>! << OBJECTIVE-C >> - (id)performSelector:(SEL)aSelector
パラメーター
aSelector | 送信するべきメッセージを識別するセレクタ。aSelector が NULL の場合、NSInvalidArgumentException が発生します。 |
戻り値
メッセージの結果であるオブジェクト。
議論
この performSelector: のメソッドは、受信者に直接 aSelector メッセージを送信するのと同じです。たとえば、次のメッセージの 3 つすべてが同じことを実行します。
- id myClone = [anObject copy];
- id myClone = [anObject performSelector:@selector(copy)];
- id myClone = [anObject performSelector:sel_getUid("copy")];
しかし、performSelector: メソッドを使用すると、実行時までに決定されないメッセージを送信することができます。変数 selector は、引数として渡すことができます。
- SEL myMethod = findTheAppropriateSelectorForTheCurrentSituation();
- [anObject performSelector:myMethod];
aSelector 引数は、引数を取らないメソッドを特定するでしょう。オブジェクト以外のものを返すメソッドの場合は、NSInvocation を使用して下さい。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
以下も参照
- performSelector:withObject:withObject:
- performSelector:withObject: 必須
受信者にメッセージと、引数としてオブジェクトを送信します。
宣言
<< SWIFT >>
func performSelector(_ aSelector: Selector, withObject object: AnyObject!) -> Unmanaged<AnyObject>! << OBJECTIVE-C >> - (id)performSelector:(SEL)aSelector withObject:(id)anObject
パラメーター
aSelector | 送信すべきメッセージを識別するセレクタ。aSelector が NULL の場合、 NSInvalidArgumentException が発生します。 |
anObject | メッセージの唯一の引数であるオブジェクト。 |
戻り値
メッセージの結果であるオブジェクト。
議論
このメソッドは、aSelector を引数として供給できることを除いて、performSelector: と同じです。aSelector は id 型の単一の引数を受け取るメソッドを識別する必要があります。他の引数の型と戻り値を持つメソッドの場合、NSInvocation を使用して下さい。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
以下も見よ
- performSelector:withObject:withObject:
methodForSelector: (NSObject class)
- performSelector:withObject:withObject: 必須
引数として二つのオブジェクトを取り、受信者にメッセージを送信します。
宣言
<< SWIFT >>
func performSelector(_ aSelector: Selector, withObject object1: AnyObject!, withObject object2: AnyObject!) -> Unmanaged<AnyObject>! << OBJECTIVE-C >> - (id)performSelector:(SEL)aSelector withObject:(id)anObject withObject:(id)anotherObject
パラメーター
aSelector | 送信するべきメッセージを識別するセレクタ。aSelector が NULL の場合、NSInvalidArgumentException が発生します。 |
anObject | メッセージの最初の引数であるオブジェクト。 |
anotherObject | メッセージの2番目の引数であるオブジェクト。 |
戻り値
メッセージの結果であるオブジェクト。
議論
このメソッドは、aSelector のために二つの引数を指定することができることを除いて、performSelector: と同じです。aSelector は id 型の二つの引数を取ることができるメソッドを識別します。他の引数の型を持ち、戻り値を持つメソッドの場合、NSInvocation を使用して下さい。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
以下も参照
methodForSelector: (NSObject class)
プロキシの識別
– isProxy 必須
受信者が NSObject から派生していないかどうかを示すブール値を返します。
宣言
<< SWIFT >>
func isProxy() -> Bool << OBJECTIVE-C >> - (BOOL)isProxy
戻り値
受信者が実際に NSObject から派生している場合は NO そうでなければ YES。
議論
このメソッド は isKindOfClass: や isMemberOfClass: を NSProxy オブジェクトに送る事がプロキシ自身に代わる事ではなく、プロキシをテストする事で、そのためこのメソッドが必要になります。受信者が、プロキシ(または他のルートクラスのメンバー) であるかどうかをテストするために、このメソッドを使用して下さい。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
廃止されたメソッド
– retain 必須
受信者の参照カウントを一つ増やします。
宣言
<< OBJECTIVE-C >>
- (instancetype)retain
戻り値
self.
議論
それ(object) の使用を完了するまで割り当て解除されるのを防ぎたいときには、オブジェクトに retain メッセージを送信します。
参照カウントが 0 に達したときにはオブジェクトは自動的に割り当て解除されます。retain メッセージは、参照カウントを一つ増やし、release メッセージは、一つ減らします。このメカニズムの詳細については、高度なメモリ管理プログラミングガイド を参照してください。
ネストされた式で使用される可能性があるため、便利なように、retain は self を返します。
独自の参照カウントスキームを定義している場合にのみ、このメソッドを実装して下さい。このような実装は、self を返す必要があり、super に retain メッセージを送信することで、継承されたメソッドを呼び出すべきではありません。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
– release< 必須
受信者の参照カウントを一つ減らします。
宣言
<< OBJECTIVE-C >>
- (oneway void)release
議論
参照カウントが 0 になった場合、受信者には、dealloc メッセージが送信されます。
独自の参照カウントスキームを定義するにのみ、このメソッドを実装して下さい。このような実装は、継承されたメソッドを呼び出すべきではありません。すなわち、それらは、super に解放(release) メッセージを含めるべきではありません。
参照カウントメカニズムの詳細については、高度なメモリ管理プログラミングガイド を参照してください。
特別な考察
手動の参照カウントを使用する代わりに、ARC を採用すべきですーARC への移行リリースノート を見よ。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
– autorelease 必須
現在の自動解放プールブロックの最後にある、受信者の保持カウントを一つ減らします。
宣言
<< OBJECTIVE-C >>
- (instancetype)autorelease
戻り値
self.
議論
自動解放プールブロックの詳細については、高度なメモリ管理プログラミングガイドを参照してください。
特別な考察
手動の参照カウントを使用する代わりに、ARC を採用すべきです。ARC への移行リリースノート を見よ。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
使用可能
iOS 2.0 以降で利用できます。
– retainCount 必須
このメソッドを使用しないでください。
宣言
<< OBJECTIVE-C >>
-(NSUInteger)retainCount
戻り値
受信者の参照カウント。
特別な考察
このメソッドは、メモリ管理の問題をデバッグする際には何の価値もありません。フレームワークオブジェクトがそれへの参照を保持するために一つのオブジェクトを保持し、同時に自動解放プールがオブジェクトに延期のリリースをいくつでも保持することができるため、このメソッドから有用な情報を得ることができることはほとんどありえません。
遵守すべきメモリ管理の基本的なルールを理解するには、メモリ管理方針 をお読みください。メモリ管理の問題を診断するには、以下のような適切なツールを使用して下さい:
- プログラムを実行する前であっても Clang Static analyzer は、メモリ管理の典型的な問題を見つけることができます。
- インストルメント・アプリケーション内のオブジェクト・アロケーション·インストルメント(インストルメント・ユーザーガイド (リンク切れ) を参照) は、オブジェクトの割り当てと破壊を追跡できます。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
– zone 必須
ゾーンは、それをパラメータとして持っているほとんどのクラスで旧式となり、無視されます。
宣言
<< SWIFT >>
<< OBJECTIVE-C >>
- (struct _NSZone *)zone
戻り値
受信者が割り当てられた所からゾーンへのポインタ。
Import 文
<< OBJECTIVE-C >>
@import ObjectiveC;
利用可能
iOS 2.0 以降で利用できます。
次の章