码迷,mamicode.com
首页 > 其他好文 > 详细

单例初始化(MRC模式之autorelease)

时间:2016-02-02 14:26:03      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

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

项目中崩溃的地方使用单例写的(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;

}

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

单例初始化(MRC模式之autorelease)

标签:

原文地址:http://www.cnblogs.com/pangbin/p/5177031.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!