OC 对象创建的本质

OC 对象创建的本质就是用alloc进行创建,用init进行返回。但是为什么init没用任何用处还要写这个呢?这是为了代码的重写。就像我们可以在子类中重写父类的方法时一样的道理。

重点重点重点
在这里插入图片描述
oc的实例对象创建的时候最小16个字节。
size 被计算出来之前是需要对齐,加上一个值,苹果中这个值是0.

什么是字节对齐?
arm64中字节对齐是8字节对齐。
3 --》8
9 --》16
其实字节对齐在浪费空间哦。

为什么要字节对齐?
字节对齐这个是用CPU生产厂家不同来处理的。
CPU早期处理方案:重复读取,这样不会挂掉。从偶数位开始写。
方便读取,提高效率,节约空间(X),节约内存(X)。
字节对齐的方法
方法一:

word_align(int x){
	return (X +7)/8*8;
}

这个代码效率更高一点。
方法二:

word_align(int x){
	return (X +7) >> 3 << 3;
}

方法三:

word_align(int x){
	return (X +7) & ~7;
}

方法二和方法三执行效率是一样的,但是方法三更好。因为写代码不要先考虑性能,应该先考虑可维护性。

总结:
1.通过过来的数据算出size_t。
2.真正的内存分配是在calloc分配内存。
在这里插入图片描述

分析小技巧:
分析会变汇编,分号之后是注释。
lldb
阅读X0寄存器中的内容:
register read x0
阅读X1寄存器中的内容:
register read x1

端点调试技巧:
加上符号端点alloc,就能进入alloc
在这里插入图片描述
在这里插入图片描述
在ram64中:

b是跳转指令:跳过去就不再回来了
bl跳转指令,跳进去再出来。 调用函数

x86是另一种指令集

###设置编译器的优化:
str 将w0中的值放到内存中
orr wzr 将0寄存器,其中z标识zero

编译器的优化设置:Build Settings optimization中更改laver成又快有小。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值