iOS内存管理

内存五大区:

  • 代码区:存放我们写的代码
  • 常量区:存储常量字符串和const常量
  • 静态区:存储全局变量和静态变量。在程序结束后系统来释放,常用的单例就是保存在这个区间。
  • :这一块的内存由开发人员管理
  • :这一块内存系统会自己管理

strong:表示拥有对象,修饰的对象引用计数+1,只要引用计数不为0就不会被销毁。(强制置为nil还是被销毁的)
weak:表示指针指向该对象但不拥有,修饰的对象引用计数不会增加。
assign:修饰基本的数据类型,这些值存在于栈中。
weak和assign:weak修饰对象,assign修饰基本类型。若是assign修饰对象会造成对象释放后指针地址还存在造成野指针,在堆中会早成程序崩溃,在栈中的内存系统会自动处理。
copy和strong:strong本质上是将指针指向同一份内存地址。copy实际上是在内存中拷贝一份对象,指针指向不同的地址

block的存储形态有三种:
_NSConcretStackBlock(栈)、_NSConcretGlobalBlock(全局)、_NSConcretMallocBlock(堆)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为什么管理内存: 程序在运行的时候,要创建大量的对象,这些对象放在堆和栈上。(基本类型放在栈上,由系统自动管理。)...
    我是谁重要吗阅读 1,415评论 0 12
  • 从上图可以看到,栈里面存放的是值类型,堆里面存放的是对象类型。对象的引用计数是在堆内存中操作的。下面我们讲讲堆和栈...
    jackyshan阅读 1,664评论 2 11
  • 自动引用计数 什么是自动引用计数内存管理/引用计数ARC规则ARC的实现 1.1 什么是自动引用计数 ARC和MR...
    凡几多阅读 908评论 0 5
  • 如果有不好的地方或者不全面的地方请留言批评指正,拜谢~~~ 引发反思栈怎么清除?会引发什么状况?怎么使栈溢出?堆空...
    代码守望者阅读 308评论 0 1
  • 转自iOS经典面试题总结--内存管理 - CocoaChina_让移动开发更简单 内存管理 1.什么是ARC? A...
    赤洱阅读 235评论 0 0