关于NSNumber地址空间的问题。

本文通过实验发现,当使用NSNumber创建整型、布尔型等数值类型的对象时,系统会复用相同的地址空间。这意味着对于一些可预测的数值,如整数、布尔值等,系统已预先生成了NSNumber对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天写代码发现了一个很有意思的问题。就是NSNumber的地址空间问题,我生成两个 int = 1 nsnumber,发现两个object的地址空间相同。

        很有意思,索性就把所有的可能是情况都试了一遍,发现生成nsnumber时,当生成intboollonglonglongcharnsnumber时,地址空间相同。貌似系统已经生成好了一部分的nsnumber,当你生成的时候就会给你用,可预测的nsnumber,比如整形,bool char。。另外alloc init numberwith两种方法都一样,都符合如上所说。

        下面上代码,自己比较下。呵呵

       NSNumber *a1 = [NSNumber numberWithUnsignedInt:2];
        NSNumber *a2 = [NSNumber numberWithUnsignedInt:2];
        
        NSNumber *b1 = [NSNumber numberWithBool:YES];
        NSNumber *b2 = [NSNumber numberWithBool:YES];
        
        NSNumber *c1 = [NSNumber numberWithChar:"a"];
        NSNumber *c2 = [NSNumber numberWithChar:"a"];
        
        NSNumber *d1 = [NSNumber numberWithDouble:2.222];
        NSNumber *d2 = [NSNumber numberWithDouble:2.222];
        
        NSNumber *e1 = [NSNumber numberWithInteger:3];
        NSNumber *e2 = [NSNumber numberWithInteger:3];
        
        NSNumber *f1 = [NSNumber numberWithFloat:2.222];
        NSNumber *f2 = [NSNumber numberWithFloat:2.222];
        
        NSNumber *g1 = [NSNumber numberWithLong:222222];
        NSNumber *g2 = [NSNumber numberWithLong:222222];
        
        NSNumber *h1 = [NSNumber numberWithLongLong:99999999999];
        NSNumber *h2 = [NSNumber numberWithLongLong:99999999999];
        
        NSNumber *i1 = [NSNumber numberWithInt:1];
        NSNumber *i2 = [NSNumber numberWithInt:1];
        
        NSNumber *j1 = [NSNumber numberWithShort:111];
        NSNumber *j2 = [NSNumber numberWithShort:111];
        
        NSNumber *k1 = [NSNumber numberWithFloat:2];
        NSNumber *k2 = [NSNumber numberWithFloat:2];
        
        
        NSNumber *l1 = [[NSNumber alloc]initWithInt:1];
        NSNumber *l2 = [[NSNumber alloc]initWithInt:1];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值