2

Objective-C や iOS SDK でのプログラミングでは、ポインターがあらゆる場所で使用されることを私は知っています。

Objective-Cでポインタが初期化されたかどうかを知る最良の方法は何ですか? nil かどうかを確認しますか?

CSomeClass *p;
//....
if(p==nil)
??

PS: つまり、Objective-C の変数のデフォルト値は何ですか? ポインタ?


アップデート

実際に私は次のような状況にあります。

あるクラスにいくつPointer *p1かのポインターがあると想像してください。Pointer *p2次に、誰かがこのクラスを呼び出すとします。つまり、これはビューであり、表示する必要があります。次に、私のクラスでは、何も初期化されていないかどうかを確認しp1p2(たとえば、p1 == nil? p2==nil?)空のテキストを表示したいと考えています。

これらのある種の比較は、Objective-C で行われますか? たとえば、初期化されていない場合のデフォルト値は何p1ですかp2? デフォルトで値はObjective-Cで何かに初期化されますか? 多分ヌルに?

4

2 に答える 2

3

Objective Cでポインタが初期化されたかどうかを知る最良の方法は何ですか? nil かチェック???

  • はい、あなたは正しいです(初期化することで、デフォルトプロパティを設定する実際の初期化ではなく、割り当てを意味していると想定しています)。ARCでnil宣言したかどうかを確認できます。CSomeClass *p;ARC 以外では、 として初期化する必要がありますCSomeClass *p = nil;

したがって、ここで次のように実行できます。

if (p) { //or if (p != nil)
  //do your operations
} else { //same as if (!p) or if (p == nil)
  //display error message
}

実際に私は次のような状況にあります。あるクラスにいくつPointer *p1かのポインターがあると想像してください 。Pointer *p2次に、誰かがこのクラスを呼び出すとします。つまり、これはビューであり、表示する必要があります。次に、私のクラスで、p1 と p2 が初期化されていないかどうかを確認したい (たとえば、p1 == nil? p2==nil?) 空のテキストを表示したい。この種の比較は ObjC で行われますか?

  • はい、Objective C では問題ありません。if (p1 && p2)またはとして確認できif ((p1 != nil) && (p2 != nil))ます。どちらも問題ありません。else の部分には、表示する空のテキストを追加できます。

たとえば、p1 と p2 が初期化されていない場合のデフォルト値は何ですか? 値はデフォルトで ObjC の何かに初期化されますか?? たぶんヌル?

  • ARC では nil になります。非 ARC では、CSomeClass *p1 = nil;これを行う前に同等にする必要があります。そうしないと、ガベージ値を持つダングリング ポインターになります。

ARC に関するドキュメントは次のとおりです。

于 2012-12-25T07:54:18.427 に答える
1

ここで理解しておくべき重要なことは、Objective-C は参照カウントを使用するということです。これが、「ポインターが初期化される」という用語が少し問題となる理由です。

オブジェクトが存在するかどうかを知る方法 (初期化されているという意味ではありません!)

if (!object) {
      NSLog(@"Object is nil");
}

オブジェクトを解放したい場合は、それを nil アウトするのが常にベスト プラクティスです。このように、他の人は割り当て解除されたインスタンスにメッセージを送信しません (厄介なクラッシュを引き起こします):

[object release],object = nil;
于 2012-12-25T07:55:16.627 に答える