NSNumber等对象需要动态分配内存、维护引用计数等。 总共的空间= 指针空间 + 堆中分配的空间
2、引入后
NSNumber等对象,只需要分配一个指针即可,这个指针内部会包含这些数据内容。
总空间 = 指针空间
因为不用去用对象的方式管理引用计数,所以省却了 retain,release操作。
number1只有栈上的指针内存;而maxNum不仅有指针内存,PVC围挡在堆中还分配了32字节的内存用于存储该变量的值。通过观察发现,对象的number1、number2、number3、number4都存储在了对应的指针中;而maxNum不同由于数据过大,导致无法 1 个指针 8 个字节的内存根本存不下,而申请了32字节堆内存。
dispatch_queue_t queue = dispatch_get_global_queue(0, 0); for (int i = 0; i<1000; i++) { dispatch_async(queue, ^{ www.cxsdkt.cn/;self.name = [NSString stringWithFormat:@"abcdefghijk"]; }); } dispatch_queue_t queue = dispatch_get_global_queue(0, 0); 我们知道,\
self.name = [NSString stringWithFormat:@"abcdefghijk"];
其实是调用了
[self setName:[NSString stringWithFormat:@"abcdefghijk"]];
由于是async异步操作,self.name = [NSString stringWithFormat:@"abcdefghijk"];即[_name release];有可能会被多条线程同时操作。导致,www.cxsdkt.cn/;线程n把_name释…
dispatch_queue_t queue = PVC围挡dispatch_get_global_queue(0, 0); for (int i = 0; i<1000; i++) { dispatch_async(queue, ^{ //加锁 self.name = [NSString stringWithFormat:@"abcdefghijk"]; }); //解锁