Objective-C Class Clusters

今天看 Xcode 文档 Concepts in Objective-C Programming 中的 Class Clusters,文中以 NSNumber 为例做介绍,对于 class methods 建立 instances of its private subclasses,例如,[NSNumber numberWithInt:5],我们很容易猜测到其代码实现,但是,标准的 alloc… 和 init… methods 也建立 instances of its private subclasses 就让人困惑了,因为 [NSNumber alloc] 会分配 NSNumber 的instances,而不会是 instances of its private subclasses,难道在 initWithInt:5 内部又分配并初始化了 instances of its private subclasses?猜测应当是这样的,那就实际验证一下,输入如下代码:
1 NSNumber *number = [NSNumber alloc];
2 NSNumber *number1 = [number initWithInt:5];
3 NSNumber *number2 = [number initWithInt:6];
并在第1行设置断点,执行这一句后,在 Debug area 的 Console 会不停打印 Did you forget to nest alloc and init?,

在 Console 输入如下命令:
p number
结果是
(NSPlaceholderNumber *) $0 = 0x000000014c6047f0 (null)

接着继续执行第2和3句,再在 Console 输入如下命令:
p number1
结果是
(__NSCFNumber *) $1 = 0xb000000000000052 (int)5

在 Console 输入如下命令:
p number2
结果是
(__NSCFNumber *) $2 = 0xb000000000000062 (int)6

number 的 class 是 NSPlaceholderNumber,跟 number1 和 number2 是不同的对象,这就验证了刚才的猜测,在 instance method initWithInt: 内部又分配和初始化了 class __NSCFNumber 的 instance,即 [[NSNumber alloc] initWithInt:5] 首先建立 instance of NSPlaceholderNumber,然后在 initWithInt: 内部又分配和初始化了 instance of __NSCFNumber,instance of NSPlaceholderNumber 会立即释放。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值