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;

    }

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

  • 相关阅读:
    oracle 函数WMSYS.WM_CONCAT()的用法(行转列) 老猫
    PL/SQL 数独 九宫图 老猫
    oracle10g rman backup and recover 老猫
    Oracle SQL的优化 老猫
    Oracle数据库中的字符处理技巧总结 老猫
    WITH分析函数 老猫
    30套JSP网站源代码合集
    Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法
    [原]Web Service学习
    常用Web Service汇总(天气预报、时刻表等)
  • 原文地址:https://www.cnblogs.com/pangbin/p/5177031.html
Copyright © 2011-2022 走看看