今天写代码发现了一个很有意思的问题。就是NSNumber的地址空间问题,我生成两个 int = 1 的nsnumber,发现两个object的地址空间相同。
很有意思,索性就把所有的可能是情况都试了一遍,发现生成nsnumber时,当生成int,bool,long,longlong,char的nsnumber时,地址空间相同。貌似系统已经生成好了一部分的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];