文档章节

app或者framework内存优化

SunGiantor
 SunGiantor
发布于 2016/05/20 17:46
字数 415
阅读 74
收藏 0
点赞 2
评论 0

最近app的内存狂增,运行过一段时间后,内存会一直增大,虽然不会影响崩溃,但是很影响心情,所以做了一下内存优化工作,总结一下如下:

由浅入深,一步步来。

一.去除没用的变量,浪费空间。analyze工具对工程分析,然后对分析结果从上到下进行处理。

二、去除内存泄露 Leaks工具分析,对内存泄露的地方进行处理

三、在manager层持有navigation,导致navigation不释放,所有的界面不释放,去除manager层的navigation成员变量。规范处理,逻辑层不操作界面

四、界面不释放(dealloc方法不执行)

一)、因为循环引用导致界面不释放

1、nstimer没有invalidate ,viewcontroller一直不释放

2、block 循环引用,,viewcontroller一直不释放

3、delegate 循环引用,viewcontroller一直不释放

二)、界面中某些特殊的空间不释放,导致viewcontroller一直不释放。

        _jjgView = [[JJOrsLZView alloc] initWithTarget:self action:@selector(didSelectGift:)];

        _jjgView.delegate = self;

        [_jjgView showFromGoodsDetail:YES];

- (void)showFromGoodsDetail:(BOOL)isFromGoodsDetail{    

    UIWindow *window = [[UIApplication sharedApplication] keyWindow];

    [window addSubview:self];

}

_jjgView这个view是加载在UIWindow上面,一直不释放,而当前的viewcontroller又持有_jjgView。导致当前的viewcontroller一直不释放,所以要对这个_jjgView处理一下,不使用的时候,使它先释放掉。

五、当工程开发的比较久的时候,会引入很多的东西,运行过程中会产生缓存文件,例如sdimageview、webview、js等.当不使用的时候,或者必要的时候将这些组件产生的缓存清除。

1、sdimagecache

2、JsMethodSignaturecache

3、webkitcachemodelpreferencekey

4、allcookies urlcache

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
SunGiantor
粉丝 14
博文 55
码字总数 20782
作品 0
长宁
高级程序员
【性能优化】今日头条iOS客户端启动速度优化

应用启动时间,直接影响用户对一款应用的判断和使用体验。头条主app本身就包含非常多并且复杂度高的业务模块(如新闻、视频等),也接入了很多第三方的插件,这势必会拖慢应用的启动时间,本...

今日头条技术团队 ⋅ 05/24 ⋅ 0

iOS 电池消耗Tips

看了一下苹果关于电池消耗的文档,可是说是一些tips,将tips翻译出来,给自己看看。 1. CPU 1. 减少使用polling 轮询? 2. 避免取消屏幕一直亮着的情况。 3. 合并工作,减少CPU的一直做小的工...

sycasl ⋅ 2017/11/02 ⋅ 0

Android 操作系统的内存回收机制

Android 是一款基于 Linux 内核,面向移动终端的操作系统。为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使应用程序关闭但不退出,并由操作系统进行进程 的回收管...

IBMdW ⋅ 2012/08/11 ⋅ 7

十大技巧优化Android App性能

无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的。 那么,如何能开发出更高性能的Android App?相信是软件开发...

常翔 ⋅ 2014/10/30 ⋅ 1

Android App优化

高效地利用线程 建议一:怎么在后台取消一些线程中的动作 我们知道App运行过程中所有的操作都默认在主线程(UI线程)中进行的,这样App的响应速度就会受到影响。会导致程序陷入卡顿、死掉甚至...

SRain215 ⋅ 2016/09/02 ⋅ 0

高效开发 Android App 的 10 个建议

假如要Google Play上做一个最失败的案例,那最好的秘诀就是界面奇慢无比、耗电、耗内存。接下来就会得到用户的消极评论,最后名声也就臭了。即使你的应用设计精良、创意无限也没用。 耗电或者...

oschina ⋅ 2014/04/04 ⋅ 19

系统角度解读Android P新特性

  先做个安利,大家都知道我们之前开源了一个AspectJ的封装库,现在,AspectJX 要了一次重大版本更新 —— 2.0.0 !!!   * 支持Instant Run编译   * 废弃 includeJarFilter和exclude...

Android群英传 ⋅ 04/25 ⋅ 0

iOS学习1:Hello iOS, HelloWorld

一、打开XCode,选择File->New->Project(快捷键)command+shift+N 二、选择iOS下的Application中的Single View Application,点击next 三、填写项目名称等信息,Devices中可以选择iPhone,iPa...

芳仔小脚丫 ⋅ 2013/06/08 ⋅ 1

Android系统特性和系统架构

首先简单讲一下Android的结构:首先是Applications(应用层)、接着:Application Framework(程序框架)、然后:类库和Android运行时(有一个Dalvik虚拟机),最下面是:Linux内核。 Applicatio...

雪狼的开发故事 ⋅ 2015/10/14 ⋅ 0

关于Android内存、性能优化的一些细节

1、使用优化过的数据容器。 在Android framework下,建议使用优化过的数据容器比如:SparseArray,SparseBooleanArray,LongSparseArray。通用的HashMap实现的内存使用率非常的低,因为他需要为...

Drealin ⋅ 2013/10/17 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 19分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 23分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 28分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 30分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 40分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 今天 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 今天 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部