首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

(2)NSNumber及Tagged Pointer

今天早上有朋友问NSNumber为啥占用8个字节(64bit),请看NSNumber头文件,发现如下代码: @property (readonly) char charValue; @property...我们先做几个试验: NSNumber *number1 = [NSNumber numberWithInt:9]; NSNumber *number2 = [NSNumber numberWithInt...:9]; NSNumber *number3 = [NSNumber numberWithInt:5]; NSNumber *number4 = [NSNumber numberWithInt:6];...的值 所以苹果确实是将值直接存在了指针本身当中了 Google上发现一张NSNumber的内存图,很形象: ?...在64位系统中,如果我们真正使用一个指针来存储NSNumber实例,那么我们首先需要一个8字节的指针,另外需要一块内存存储NSNumber实例,这通常又是8字节。这样的内存开销是比较大的。

59650
您找到你想要的搜索结果了吗?
是的
没有找到

iOS小技能:装箱和拆箱(boxing、unboxing)​

引言 get 和post 布尔值参数处理( 使用NSNumber 传BOOL值) 全局的const常量代替宏常量,节省内存空间。 敏感逻辑的保护: 把函数名隐藏在结构体里,以函数指针成员的形式存储。...而bool表示0是false,所以非0是true; 2.1 NSCFBoolean NSCFBoolean是NSNumber类簇中的一个私有的类,它是通往CFBooleanRef类型的桥梁。...NSLog(@"%@", [@(YES) class]); __NSCFBoolean 2.1 get 和post 布尔值参数处理( 使用NSNumber 传BOOL值) 使用NSNumber 传...@42,@3.14,@YES,@'Z':返回一个由相关类构造初始化的 NSNumber 对象 比如 @42 → [NSNumber numberWithInteger:42],或者 @YES → [NSNumber...(比如,const char*返回NSString,int返回NSNumber。) 2.2 Objective-C 常量 选择器和协议可以作为方法参数。

52110

iOS - 老生常谈内存管理(五):Tagged Pointer

在引入 Tagged Pointer 技术之前 NSNumber等对象存储在堆上,NSNumber的指针中存储的是堆中NSNumber对象的地址值。 从内存占用来看 基本数据类型所需的内存不大。...但总不能弃用NSNumber对象而改用基本数据类型吧。 从效率上来看 为了使用一个NSNumber对象,需要在堆上为其分配内存,还要维护它的引用计数,管理它的生命周期,实在是影响执行效率。...NSNumber等对象的指针中存储的数据变成了Tag+Data形式(Tag为特殊标记,用于区分NSNumber、NSDate、NSString等对象类型;Data为对象的值)。...{ NSNumber *number1 = @1; NSNumber *number2 = @2; NSNumber *number3 = @3;...*number1 = @(a); NSNumber *number2 = @(b); NSNumber *number3 = @(c); NSNumber

1.7K60

iOS_Tagged Pointer是什么,结构

文章目录 iOS Tagged Pointer 问题 原理 结构 NSNumber NSString 特点 测试 测试准备: NSNumber NSString 注意事项 isa指针 面试题 题1:执行以下两段代码...iOS Tagged Pointer 问题 如果要存一个NSNumber对象,其值是一个整数。...一部分直接保存数据,另一部分作为标记(这是一个特别的指针,不指向任何一个地址) (拿一个整数来说,4个字节所能表示的有符号整数就可达20 多亿,注:2^31=2147483648,另外 1 位作为符号位) 结构 NSNumber...= 6, OBJC_TAG_RESERVED_7 = 7, ...... }; ---- 特点 专门用来存储小的对象,如:NSString、 NSNumber...NSNumber *num0 = @1; NSNumber *num1 = @(0xffffffffffffff); // 14个f // 一共15位(1位4个bit),最高位Tag+类标志,最低位数据类型

40830
领券