zoukankan      html  css  js  c++  java
  • 单例初始化(MRC模式之autorelease)

    最近在一项目中,在某个地方总是有内存闪退问题,经排查之后,终于找到问题所在。

    项目中崩溃的地方使用单例写的(MRC模式),其中单例的初始化方法如下:

    + (GetCalendarEvents *)shareInstence

    {

        if (_get == nil) {

            _get = [[[GetCalendarEvents alloc] init] autorelease];

          

            _get.projectPlanArray = [[[NSMutableArray alloc] init] autorelease];

            _get.todoArray = [[[NSMutableArray alloc] init] autorelease];

            _get.noteArray = [[[NSMutableArray alloc] init] autorelease];

            _get.workLogArray = [[[NSMutableArray alloc] init] autorelease];

           _get.scheduleArray = [[[NSMutableArray alloc] init] autorelease];

           

            _get.events = [[[NSMutableDictionary alloc] init] autorelease];

                    _get.chackDictionary = [[[NSMutableDictionary alloc] init] autorelease];

           

       }

        return  _get;

    }

    上述代码中使用了autorelease,这在单例中会造成严重的内存泄露,因为单例模式下的autoRelease只有在程序退出的时候才释放,在单例模式最好不使用autoRelease,或者使用嵌套的AutoRelease release来处理。惨痛的教训。。。。可以改为如下代码而实现:

    + (GetCalendarEvents *)shareInstence

    {

        if (_get == nil) {

            _get = [[GetCalendarEvents alloc] init];

        }

        return _get;

    }

     

    - (instancetype)init

    {

        self = [super init];

        if (self) {

            _projectPlanArray = [[NSMutableArray alloc] init];

            _todoArray = [[NSMutableArray alloc] init];

            _noteArray = [[NSMutableArray alloc] init];

            _workLogArray = [[NSMutableArray alloc] init];

            _scheduleArray = [[NSMutableArray alloc] init];

            

            _events = [[NSMutableDictionary alloc] init];

            

            _chackDictionary = [[NSMutableDictionary alloc] init];

            

        }

        return self;

    }

    本人也没怎么用过手动内存管理,只是公司的项目比较早。。。哎,好苦逼。。。。在此总结一下!!!!!

  • 相关阅读:
    计算机控制技术课程动画课件资料等
    “工业4.0”下的可视化工厂建设方案
    UE4成批处理透明材质
    ROS_Kinetic_x 基於ROS和Gazebo的RoboCup中型組仿真系統(多機器人協作)
    UE4 C++与蓝图交互
    UE4联机烘焙
    临近毕业:AndroidVS大数据Java的offer,我到底应该怎么选?
    态度决定成败:大专毕业的我如何在25岁时拿到了阿里P6的offer?
    这13位专家关于kotlin的看法,80%移动开发人员都没听过
    Flutter 初学者到底需要怎样的Demo?
  • 原文地址:https://www.cnblogs.com/pangbin/p/5177031.html
Copyright © 2011-2022 走看看