あなたの混乱がどこにあるのかわからないので、変数と呼ばれることが多い単純なボックスから始めます。これが基本的すぎる場合はお詫びします。
あなたが書くとき:
NSInteger someNumber;
を格納するのに適したボックスを割り当て、NSINteger
このボックスを名前で参照するように求めています。ボックスには、アドレスまたはポインタsomeNumber
と呼ばれることが多い別の名前もあります。したがって、整数にスペースを割り当てました。
同様に、次のように記述します。
NSNumber *intNumber;
を格納するのに適したボックスを割り当てていますNSNumber *
。これは、このボックスに他のボックスの名前 (アドレス) を含めるように指定する方法です。このボックスを name で参照するように求めていますintNumber
。したがって、ポインター用のスペースを割り当てました。割り当てていないのは、NSNumber
(注 no *
) と名前(またはアドレスまたはポインター) を格納できるボックスですintNumber
。
今行:
releasePool *pool = [[NSAutoreleasePool alloc] init];
は 2 つのことを行います。左側は、最初の 2 つの例とまったく同じことを行います。ボックスを割り当て、便利な名前を付けます。pool
このボックスは、値を保持するボックスの名前を保持するのに適していNSAutoreleasePool
ます。
右側のサイズは、 を使用して、値alloc
を保持するのに適したボックスを割り当てる式です。NSAutoreleasePool
を使用して、そのボックスに値を入れますinit
。ボックスの名前を返します。
最後に、割り当ては RHS によって返された名前を受け取り、それを LHS によって作成されたボックスに入れます。
したがって、ステートメント全体で2 つのボックスが作成されました。
これにより、次のことがわかります。
intNumber = [NSNumber numberWithInteger: 100];
ここで、LHS は既に作成されているボックスを指定します。RHS は、ボックスの名前を返す式です。RHS 側が返す名前のボックスはどこで作成されましたか? 本当に推測することしかできませんが (numberWithInteger
もちろんソースがない限り)、それは問題ではありません。ボックスはいつか誰かによって作成され、式はその名前を返します。割り当てにより、割り当てなかったボックスの名前が割り当てられ、ボックスに割り当てられましintNumber
た。あなたが知る必要があるのはそれだけです...
よくほとんど。ARC または GC を使用している場合は、ここで終了できます。MRC を使用している場合はretain
、ボックスにするかどうかを知る必要がありますが、それは別の問題です...
HTH。