MRC内存管理

//只要创建一个对象默认引用计数器的值就加一、
Person *p = [[Person alloc]init];
NSLog(@"retainCount = %lu",[p retainCount]);
//只要给一个对象发送一个retain消息,对象的引用计数器就会加一
[p retain];
NSLog(@"reatinCount = %lu",[p retainCount]);

    //通过指针变量P,给p指向的对象发送一条release消息
    //只要对象接收到release消息,引用计数器就会-1
    //只要一个对象的引用计数器为0,系统就会释放对象
    [p release];
    //需要注意的是:release仅仅代表引用计数器-1,不代表销毁/回收对象
    [p release];//0

//问题1:什么是堆?什么是栈?

对象存放在堆里面,系统不会自动释放,需要程序员手动释放
栈里面存了变量,系统会自动释放

栈(操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈(先进后出);

堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由系统回收,分配方式类似于链表。
//问题2:什么是内存管理?
答:
由于手机内存有限,所以
分配内存 : 比如创建一个对象, 会增加内存占用
清除内存 : 比如销毁一个对象, 能减小内存占用

//问题3:内存管理的本质是什么?
答:
释放堆里面不使用的对象

OC对象存放于堆里面
非OC对象一般放在栈里面(栈内存会被系统自动回收)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.只有OC对象才需要进行内存管理的本质原因 --1.OC对象存放于堆中 --2.非OC对象存在栈中(栈内存会被系...
    金克拉拉拉拉阅读 582评论 0 2
  • 内存管理 简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与a...
    丶逐渐阅读 2,073评论 1 16
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,867评论 2 37
  • 11.看下面的程序,第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢? 为什...
    AlanGe阅读 831评论 1 4
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,873评论 0 11

友情链接更多精彩内容