首页 > 其他 > 详细

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

时间:2016-02-02 14:24:51      阅读:210      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!