arc下内存泄漏的解决小技巧

一定要注意,我们运行app时,一定要关心内存的使用,尽量不要超过20M,即使有很多图片要显示也绝对不能超过30M。所以运行自己开发的app时多关心内存的使用是个很好的习惯。

对于性能,内存的优化,这个涉及的就太多了。现在先讲讲几个最基本常见的内存泄露下的解决方法。

1. instruments

instrument可以报出不少内存泄露的错误,方法:http://www.cocoachina.com/ios/20141203/10519.html,很容易操作。

不过它最大的功能还是可以自己看出哪里内存用了多,从而进行优化。

2. arc的问题

ARC does not manage C-types, of which CGImage may be considered. You must release the ref manually when you are finished with CGImageRelease(image);

这是stackoverflow别人的回答,就是说在arc模式下,C-types的对象需要手动来进行释放

arc还会有循环引用等问题,导致对象不能被释放,有个小技巧来处理,可以写下-(void)dealloc设置断点,如果页面跳转没有执行它,那么证明你犯错了,自动计数没有为0,不会释放的,内存会一直增加,需要去找错。

3. image的一些建议

很多图片要加载,不要用队列存储image,要么image存在沙盒里,队列里存地址,要么队列存储缩略图,点击的时候再放大。

最不可取的方法就是本来是一个清晰的大图,可能需要缩小,就直接imageView改变尺寸,这个非常耗内存。

时间: 2024-10-21 03:38:19

arc下内存泄漏的解决小技巧的相关文章

八.OC基础加强--1.autorelease的用法 2.ARC下内存管理 3.分类(category)4.block的学习

1.autorelease的用法   1.自动释放池及autorelease介绍 (1)在iOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的. (2)当一个对象调用autorelease时,会将这个对象放到位于栈顶的释放池中 . 2.为什么会有autorelease? OC的内存管理机制中比较重要的一条规律是:谁申请,谁释放. 但有些情况下,开发者并不能确定某些对象何时释放.这时候就需要自动释放池. 它的好处是: (1)不需要再关心对象释放的时间 : (2)不需要再关

ARC下内存泄露问题

ARC下内存泄露问题,有需要的朋友可以参考下. iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用ARC并不代表了不会发生内存泄露,使用不当照样会发生内存泄露. 下面列举两种内存泄露的情况. 1,循环参照 A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放. 这种问题常发生于把delegate声明为strong属性了. 例, @interface SampleViewController @property (nonatomic, strong)

高并发超库存下单的一个数据库层面解决小技巧

问题描述:库存更新成负数 产生原因:由于多线程并发时每个下单线程判断是否超库存时,读到了数据库同样的值,都认为库存满足要求,都执行了下单扣库存的操作,结果就是库存被更新成了负数,实际下单量大于实际库存. 解决办法:1.可以通过java的sychronized关键字以及Lock API去加锁,这样实现比较重,并且跨jvm的情况需要考虑分布式锁. 2.在数据库压力不是特别大的情况下,可以有一个小技巧来快速解决问题:(TPS很大的情况需要考虑消息队列等方式) 在sql中加上条件,当前库存>=n(要扣除

Android开发常见的Activity中内存泄漏及解决办法

上一篇文章楼主提到由Context引发的内存泄漏,在这一篇文章里,我们来谈谈Android开发中常见的Activity内存泄漏及解决办法.本文将会以"为什么""怎么解决"的方式来介绍这几种内存泄漏. 在开篇之前,先来了解一下什么是内存泄漏. 什么是内存泄漏? 内存泄漏是当程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗.内存泄漏并不是指物理上的内存消失,这里的内存泄漏是值由程序分配的内存但是由于程序逻辑错误而导致程序失去了对该内存的控制,使得内存浪费. 怎

.NET中常见的内存泄漏和解决办法

在.NET中,虽然CLR的GC垃圾回收器帮我们自动回收托管堆对象,释放内存,最大程度避免了"内存泄漏"(应用程序所占用的内存没有得到及时释放),但.NET应用程序"内存泄漏"的问题还是会存在,如果不加以注意,"内存泄漏"时有发生. 有关流以及Reader或Writer引起的内存泄漏 比如,把文件读取到流中: public static string ReadFile() { var filePath = @"硬盘地址"; va

使用 Android Studio 检测内存泄漏与解决内存泄漏问题

自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclipse,成为主流的Android开发IDE.Android Studio在为我们提供了良好的编码体验的同时,也提供了许多对App性能分析的工具,让开发者可以更方便分析App性能.Google在IO大会上一直告诫开发者不要无节制的使用手机内存,要注意一些不良的开发习惯会导致App的内存泄漏.虽然如今网上

java PreparedStatement造成内存泄漏 的解决方法

最近用java写一个数据库程序,发现运行一段时间后总会出现内存溢出.想用内存监控工具查看一下是哪里内存泄漏了,于是上网查看了一下,看到了jmap工具. jmap工具 jmap打印出某个java进程(使用pid)内存内的,所有'对象'的情况(如:产生那些对象,及其数量). 可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本.使用方法 jmap -histo pid.如果连用SHELL jmap -histo pid>a.log可以将其保存到文本中去,在一段时间后,使用文

MFC多线程内存泄漏问题&解决方法

在用visual studio进行界面编程时(如MFC),前台UI我们可以通过MFC的消息循环机制实现.而对于后台的数据处理,我们可能会用到多线程来处理.那么对于大多数人(尤其是我这种菜鸟),一个比较快捷的方法便是选择MFC多线程:AfxBeginThread或者CreateThread来进建立多线程.当一两个线程还是可以得,当有3个或者3个以上的线程出现时,极可能出现内存泄漏.原因分析如下: CWinThread的多线程不安全性: 因为 CWinThread 会调用_beginthreadex

Linux下内存泄漏工具

原文链接:http://www.cnblogs.com/guochaoxxl/p/6970090.html 概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,内存泄漏是常见的问题.当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,这时就出现了内存泄漏.尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏. 内存泄露可以分为以下几类: 1. 常发