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

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

}

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

转载于:https://www.cnblogs.com/pangbin/p/5177031.html

单例初始化(MRC模式之autorelease)相关推荐

  1. Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)

    摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...

  2. Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比

    点击关注公众号,利用碎片时间学习 来源:blog.csdn.net/xsxy0506/article/details/117321181 redis作为一种NoSql数据库,其提供了一种高效的缓存方案 ...

  3. java创建具体时间点_java单例饿汉模式对象创建时间点疑问

    关于java单例中饿汉式模式的解释,大多如下: 饿汉模式线程安全的,在类创建的同时就已经创建好一个静态的对象,相对与懒汉模式对象创建过早,浪费空间. 但是jvm中明确定义是:虚拟机规范则是严格规定了有 ...

  4. Javascript中的单例和模块模式

    在javascript中,单例(singleton)就是指只有一个实例的对象,而不需要用new关键字去创建一个对象示例.单例其实有点类似于C# /C++里面的静态类.在javascript中,是以对象 ...

  5. IoC与DI工厂、单例、原型模式详解

    1.工厂模式 1.1 工厂模式的由来 在现实生活中我们都知道 原始社会自给自足(没有工厂) 农耕社会有了小作坊(简单工厂,如民间酒坊) 工业革命后有了流水线(工厂方法,自产自销) 现代产业链中有代工厂 ...

  6. Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:爱宝贝丶 my.oschina.net/zhangxufen ...

  7. c++ 单例模式_Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

    redis作为一种高效的缓存框架,使用是非常广泛的,在数据存储上,在运行时其将数据存储在内存中,以实现数据的高效读写,并且根据定制的持久化规则不同,其会不定期的将数据持久化到硬盘中. 另外相较于其他的 ...

  8. JAVA设计模式 - 单例与工厂模式

    前言 设计模式是在前人总结下 , 得出的经验, 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性.继承性和多态性以及类的关联关系和组合关系的充分理解, 接着我们来看设计模式中的两种比较重要的 ...

  9. 单例工厂代理模式总结

    版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢! 本文网址:https://blog.csdn.net/sun8112133/article/details/800582 ...

  10. 单例-初始化动作只执行一次

    class MusicPlayer(object):# 记录第一个被创建对象的引用instance = None# 记录是否执行过初始化动作init_flag = Falsedef __new__(c ...

最新文章

  1. 用两种方法判断男性女性的存储过程
  2. Winform中使用ZedGraph实现曲线图中字体去掉边框
  3. OpenCV各向异性图像分割anisotropic image segmentation的实例(附完整代码)
  4. leetcode 424. Longest Repeating Character Replacement | 424. 替换后的最长重复字符(Java)
  5. 统计学基础学习笔记:概率与概率分布
  6. python-packaging 命令行脚本
  7. python三维数组表示方法_Python操作多维数组和矩阵
  8. ajax post请求怎么传参_如何在$ ajax POST中传递参数?
  9. 难怪这个文章评论多,原来被推荐了
  10. 超过千字的文章,才统计勤写标兵
  11. Axure原型设计相关:Axure RP8中继器实例(附rp文件)——列表的增删改查、分页
  12. CTF_ CRYPTO(Cryptography)_密码学/密码编码学
  13. Apache Iceberg Research
  14. 怎么查看linux系统硬盘,Linux系统下如何查看所有存储设备(磁盘分区)
  15. vue 修改标题栏_在Vue中如何实现动态修改页面title
  16. Go 语言 app.conf配置文件
  17. 租房中介系统源码,房屋租赁管理系统源码
  18. 如果恰巧有一台超微服务器,如何调节风扇转速
  19. 不用下载就能在线P图,这款工具分享给你
  20. gitlab 配置QQ邮箱

热门文章

  1. 网络中的一些专业名词解释
  2. 【2019徐州网络赛:G】Colorful String(回文树+二进制统计回文串内不同字母数技巧)
  3. 风控中英文术语手册(银行_消费金融信贷业务)
  4. 蓝桥杯 java 组素数_第四届蓝桥杯javaC组_组素数
  5. 算法:两个数的和等于指定值1. Two Sum
  6. 算法:回溯六 Permutations II数组全排列II
  7. rpm、dpkg、yum、apt比较
  8. mysql怎么添加第二行,如何在mysql中得到結果查詢中只有第二行?
  9. linux桌面系统开启wifi,8089B开启Wifi的方法(默认的红旗linux系统)
  10. hadoop2.8配置_hadoop2.8安装教程