美文网首页
iOS性能优化

iOS性能优化

作者: 小圆菜陪你财务自由 | 来源:发表于2019-10-18 15:12 被阅读0次
retain: isa做++操作,如果上溢出(isa指针无法再保存引用计数(大于2^19)),isa留一半,另一半拷贝到散列表。
release: isa做--操作,如果下溢出(引用计数为负数),如果有散列表有值从散列表删除一半给isa,如果没有值走析构。
Weak实现原理概括:
  1. 弱应用对象, 底层也是使用了哈希存储,或者叫散列存储,那么是对象的内存地址作为key, 指向该对象的所有弱应用的指针作为值
  2. 释放时,就是以对象的内存地址作为key,去存储弱引用对象的哈希表里, 找到所有的弱引用对象,然后设置为nil , 最后移除这个弱引用的散列表.
autorelease
  1. 自动释放池的主要结构体和类是:__AtAutoreleasePool、AutoreleasePoolPage
  2. 调用了autorelease的对象最终都是通过AutoreleasePoolPage对象来管理的
  3. AutoreleasePoolPage的大小都是4096个字节


    xyc.png

    自动释放池是由AutoreleasePoolPage以双向链表的方式实现的
    当对象调用autorelease方法是, 会将延迟释放的对象加入AutoreleasePoolPage中
    调用pop方法是, 会向栈中的对象发送release消息

通过这个函数来查看自动释放池的情况
extern void _objc_autoreleasePoolPrint(void);
PS:

1、weakSelf 是为了block不持有self,避免Retain Circle循环引用。在 Block 内如果需要访问 self 的方法、变量,建议使用 weakSelf。
2、strongSelf的目的是因为一旦进入block执行,假设不允许self在这个执行过程中释放,就需要加入strongSelf。block执行完后这个strongSelf 会自动释放,没有不会存在循环引用问题。如果在 Block 内需要多次 访问 self,则需要使用 strongSelf。

内存泄露:
内存泄露常见原因

1、循环引用
2、引引用
3、非OC对象,没有手动释放

内存泄漏检测方法

1、静态检测方法(手动、自动)
2、动态监测方法(instruments 第三方工具检测)
3、dealloc

相关文章

网友评论

      本文标题:iOS性能优化

      本文链接:https://www.haomeiwen.com/subject/hozsmctx.html