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;

    }

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

  • 相关阅读:
    [WC2010]重建计划
    [Codeforces150E] Freezing with Style
    [Codeforces915F] Imbalance Value of a Tree
    [Codeforces1055F] Tree and XOR
    [Codeforces1117G]Recursive Queries
    [Codeforces587F]Duff is Mad
    [Codeforces547E]Mike and Friends
    [2020团体程序设计天梯赛-总决赛L3-2] 传送门
    第05组 Beta冲刺 (1/5)
    第05组 Alpha冲刺 总结
  • 原文地址:https://www.cnblogs.com/pangbin/p/5177031.html
Copyright © 2011-2022 走看看