• OC-手动内存管理




    一.为什么要进行内存管理


    •移动设备的内存极其有限,每个app所能占用的内存是有限制的
    •下列行为都会增加一个app的内存占用
    Ø创建一个OC对象
    Ø定义一个变量
    Ø调用一个函数或者方法
    •当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象、变量等
    •如果app占用内存过大
    Ø系统可能会强制关闭app,造成闪退现象,影响用户体验

    二.OC中的内存管理是管理的内存中的哪一部分:
    我们知道:内存分为五大区域:栈区,堆区,数据去,bss段,代码区。而最后三者是在程序启动时由操作系统进行控制的,所以不需要我们管理。栈区存储的也都是已经初始化的基本数据类型变量和函数。而我们创建的对象则分配在堆区中,是需要我们进行管理的。

    三.内存管理的管理范围
    任何继承了NSObject的对象(所有的OC对象,对象类型)
    对其他非对象类型(基本数据类型)无效(intcharfloatdoublestructenum等)


                                      


    四.内存管理的种类。

    1.手动内存管理:M(manuallyR (reference)C (couting)

    2系统自动管理:A(automatic )R (reference)C (couting)

    在最新的Xcode中,默认内存管理管理方式是ARC想切换成MRC需要对其进行配置,如下:



    五。引用计数器的介绍

          对象在创建时,内部会自动创建一个引用计数器retainCount,当retainCount=0时,系统会回收当前对象,retainCount是唯一判断标记。release会-1,retain会+1,retain后返回的是自己self指针。


    <pre name="code" class="objc">#import <Foundation/Foundation.h>
    
    
    
    @interface person : NSObject
    
    
    @end
    
    @implementation person
    
    @end
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            /*
         
         
         引用计数器的常见操作
         给对象发送一条retain消息, 可以使引用计数器值+1(retain方法返回对象本身)
         给对象发送一条release消息, 可以使引用计数器值-1
         给对象发送retainCount消息, 可以获得当前的引用计数器值(通过%ld输出查看)
         
         需要注意的是: release并不代表销毁回收对象, 仅仅是计数器-1
         
         注意:我们只能通过操作对象计数器,间接控制对象的释放与否。
    */
           
            //创建一个person 类的对象 p.  
            person * p = [[person alloc]init];   // 对象创建后引用计数器就会加1。 <pre name="code" class="objc" style="font-size:18px;">
    
    [p release]; // p  被释放掉了 p = nil; //将 指针指向nil NSLog(@"%lu", [p retainCount]); //空对象调任何方法结果都是 0 // NSLog(@"Hello, World!"); } return 0;}
    
    
    
    




    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    网络编程Netty IoT百万长连接优化
    使用 .NET 4.6.2 中的 HttpClientFactory(Use HttpClientFactory from .NET 4.6.2)
    无人值守停车场收费解决方案
    将普通用户加入到串口可以使用/dev/ttyS0或/dev/ttyUSB0的方法 微信公众号
    什么是车规级、车轨级芯片 微信公众号
    三个问题
    使用百度的一些隐私设置
    鼠标滚轮放大图片
    wamp 报错:The configuration file contains a syntax error on line
    PHP 存在不受控制的递归漏洞
  • 原文地址:https://www.cnblogs.com/wahy/p/4817223.html
Copyright © 2020-2023  润新知