不知道您的困惑在哪里,我将从简单的框开始,通常称为变量,如果这太基本了,请道歉。
当你写:
NSInteger someNumber;
您正在分配一个适合存储 an的盒子NSINteger
,并要求通过名称引用该盒子someNumber
- 该盒子还有另一个名称,通常称为其地址或指针。所以你已经为一个整数分配了空间。
同样,当你写:
NSNumber *intNumber;
您正在分配一个适合存储的框NSNumber *
- 这是指定您希望此框包含其他框的名称(地址)的方式 - 并要求此框由名称引用intNumber
。所以你已经为指针分配了空间,你没有分配的是一个盒子,它存储一个NSNumber
(注意 no *
),你可以存储它的名字(或地址或指针intNumber
) 。
现在这一行:
releasePool *pool = [[NSAutoreleasePool alloc] init];
做两件事。左边和前两个例子完全一样,它分配了一个盒子,给它一个方便的名字pool
,这个盒子适合存放保存NSAutoreleasePool
值的盒子的名字。
现在右边的大小是一个表达式,它使用 分配alloc
一个适合保存NSAutoreleasePool
值的盒子;init
使用;将值放入该框中 然后返回框的名称。
最后,分配采用 RHS 返回的名称并将其放入 LHS 创建的框中。
因此,总体而言,该声明创建了两个框。
这让我们了解您的:
intNumber = [NSNumber numberWithInteger: 100];
此处 LHS 指定了一个已创建的框。RHS 是一个返回框名的表达式。RHS 方返回其名称的框是在哪里创建的?我们只能真正猜测(numberWithInteger
当然,除非我们有来源),这没关系 - 盒子是由某人在某个时候创建的,表达式返回它的名称。分配将我们没有分配的盒子的名称放入我们分配的intNumber
盒子中。这就是你需要知道的一切......
差不多吧。如果您使用的是 ARC 或 GC,您可以在此处停止。如果您使用的是 MRC,您需要知道是否使用retain
该框,但这是另一个问题......
HTH。