单例初始化(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;
}
本人也没怎么用过手动内存管理,只是公司的项目比较早。。。哎,好苦逼。。。。在此总结一下!!!!!
转载于:https://www.cnblogs.com/pangbin/p/5177031.html
单例初始化(MRC模式之autorelease)相关推荐
- Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比(转)
摘要: redis作为一种NoSql数据库,其提供了一种高效的缓存方案,本文则主要对其单例,主从模式,sentinel以及集群的配置方式进行说明,对比其优缺点,阐述redis作为一种缓存框架的高可用性 ...
- Redis 单例、主从模式、sentinel 以及集群的配置方式及优缺点对比
点击关注公众号,利用碎片时间学习 来源:blog.csdn.net/xsxy0506/article/details/117321181 redis作为一种NoSql数据库,其提供了一种高效的缓存方案 ...
- java创建具体时间点_java单例饿汉模式对象创建时间点疑问
关于java单例中饿汉式模式的解释,大多如下: 饿汉模式线程安全的,在类创建的同时就已经创建好一个静态的对象,相对与懒汉模式对象创建过早,浪费空间. 但是jvm中明确定义是:虚拟机规范则是严格规定了有 ...
- Javascript中的单例和模块模式
在javascript中,单例(singleton)就是指只有一个实例的对象,而不需要用new关键字去创建一个对象示例.单例其实有点类似于C# /C++里面的静态类.在javascript中,是以对象 ...
- IoC与DI工厂、单例、原型模式详解
1.工厂模式 1.1 工厂模式的由来 在现实生活中我们都知道 原始社会自给自足(没有工厂) 农耕社会有了小作坊(简单工厂,如民间酒坊) 工业革命后有了流水线(工厂方法,自产自销) 现代产业链中有代工厂 ...
- Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:爱宝贝丶 my.oschina.net/zhangxufen ...
- c++ 单例模式_Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
redis作为一种高效的缓存框架,使用是非常广泛的,在数据存储上,在运行时其将数据存储在内存中,以实现数据的高效读写,并且根据定制的持久化规则不同,其会不定期的将数据持久化到硬盘中. 另外相较于其他的 ...
- JAVA设计模式 - 单例与工厂模式
前言 设计模式是在前人总结下 , 得出的经验, 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性.继承性和多态性以及类的关联关系和组合关系的充分理解, 接着我们来看设计模式中的两种比较重要的 ...
- 单例工厂代理模式总结
版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢! 本文网址:https://blog.csdn.net/sun8112133/article/details/800582 ...
- 单例-初始化动作只执行一次
class MusicPlayer(object):# 记录第一个被创建对象的引用instance = None# 记录是否执行过初始化动作init_flag = Falsedef __new__(c ...
最新文章
- 用两种方法判断男性女性的存储过程
- Winform中使用ZedGraph实现曲线图中字体去掉边框
- OpenCV各向异性图像分割anisotropic image segmentation的实例(附完整代码)
- leetcode 424. Longest Repeating Character Replacement | 424. 替换后的最长重复字符(Java)
- 统计学基础学习笔记:概率与概率分布
- python-packaging 命令行脚本
- python三维数组表示方法_Python操作多维数组和矩阵
- ajax post请求怎么传参_如何在$ ajax POST中传递参数?
- 难怪这个文章评论多,原来被推荐了
- 超过千字的文章,才统计勤写标兵
- Axure原型设计相关:Axure RP8中继器实例(附rp文件)——列表的增删改查、分页
- CTF_ CRYPTO(Cryptography)_密码学/密码编码学
- Apache Iceberg Research
- 怎么查看linux系统硬盘,Linux系统下如何查看所有存储设备(磁盘分区)
- vue 修改标题栏_在Vue中如何实现动态修改页面title
- Go 语言 app.conf配置文件
- 租房中介系统源码,房屋租赁管理系统源码
- 如果恰巧有一台超微服务器,如何调节风扇转速
- 不用下载就能在线P图,这款工具分享给你
- gitlab 配置QQ邮箱
热门文章
- 网络中的一些专业名词解释
- 【2019徐州网络赛:G】Colorful String(回文树+二进制统计回文串内不同字母数技巧)
- 风控中英文术语手册(银行_消费金融信贷业务)
- 蓝桥杯 java 组素数_第四届蓝桥杯javaC组_组素数
- 算法:两个数的和等于指定值1. Two Sum
- 算法:回溯六 Permutations II数组全排列II
- rpm、dpkg、yum、apt比较
- mysql怎么添加第二行,如何在mysql中得到結果查詢中只有第二行?
- linux桌面系统开启wifi,8089B开启Wifi的方法(默认的红旗linux系统)
- hadoop2.8配置_hadoop2.8安装教程