当前位置: 首页 > 编程笔记 >

IOS 常见内存泄漏以及解决方案

董喜
2023-03-14
本文向大家介绍IOS 常见内存泄漏以及解决方案,包括了IOS 常见内存泄漏以及解决方案的使用技巧和注意事项,需要的朋友参考一下

IOS 常见内存泄漏以及解决方案

整理了几个内存泄漏的例子,由于转载地址已经找不到了,在这里就不一一列出来了。
1 OC和CF转化出现的内存警告

CFStringRef cfString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)picDataString,NULL,CFSTR(":/?#[]@!$&'()*+,;="),kCFStringEncodingUTF8);

NSString *baseString = [NSString stringWithString:(NSString *)cfString];

//释放
CFRelease(cfString);

2,循环参照

A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放。

这种问题常发生于把delegate声明为strong属性了。

例,

@interface SampleViewController

@property (nonatomic, strong) SampleClass *sampleClass;

@end

@interface SampleClass

@property (nonatomic, strong) SampleViewController *delegate;

@end

上例中,解决办法是把SampleClass 的delegate属性的strong改为assing即可。

3,死循环

如果某个ViewController中有无限循环,也会导致即使ViewController对应的view关掉了,ViewController也不能被释放。

这种问题常发生于animation处理。

例,

比如,

CATransition *transition = [CATransition animation];

transition.duration = 0.5;

tansition.repeatCount = HUGE_VALL;

[self.view.layer addAnimation:transition forKey:"myAnimation"];

上例中,animation重复次数设成HUGE_VALL,一个很大的数值,基本上等于无限循环了。

解决办法是,在ViewController关掉的时候,停止这个animation。

-(void)viewWillDisappear:(BOOL)animated {

  [self.view.layer removeAllAnimations];

}

内存泄露的情况当然不止以上两种。

感谢阅读,希望能帮助到大家,谢谢大家对本站 的支持!

 类似资料:
  • 本文向大家介绍Android Handler内存泄漏详解及其解决方案,包括了Android Handler内存泄漏详解及其解决方案的使用技巧和注意事项,需要的朋友参考一下 关联篇:深入Android的消息机制源码详解-Handler,MessageQueue与Looper关系 关联篇:HandlerThread 使用及其源码完全解析 在android开发过程中,我们可能会遇到过令人奔溃的OOM异

  • 问题内容: 我有一个Python程序,它运行一系列实验,没有打算从一个测试存储到另一个测试的数据。我的代码包含一个我完全找不到的内存泄漏(我已经查看了内存泄漏的其他线程)。由于时间限制,我不得不放弃寻找泄漏的机会,但是如果我能够隔离每个实验,该程序可能会运行足够长的时间以产生所需的结果。 在单独的线程中运行每个测试是否有帮助? 还有其他隔离泄漏影响的方法吗? 具体情况详 我的代码分为两部分:实验运

  • 在阅读了大量有关MAT的内容后,我使用我的生产堆转储来分析内存泄漏问题。下面是泄漏报告错误: 线程org.apache.tomcat.util.threads.taskthread@0x6d8be0a30 http-bio-8443-exec-115保留总大小为3,695,816,440(89.03%)字节的局部变量。 内存累积在“'<'System class Loader'>”加载的“java

  • 本文向大家介绍PHPExcel内存泄漏问题解决方法,包括了PHPExcel内存泄漏问题解决方法的使用技巧和注意事项,需要的朋友参考一下 使用 PHPExcel 来生成 excel 文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的 excel 文档保存来避免内存耗尽。 然而 PHPExcel 存在 circular references 的情况(貌似在最新的 1.6.5

  • 问题内容: 我有一个Grails应用程序,该应用程序完成了相当不错的域对象创建和销毁工作,而且它似乎以非常非常快的速度耗尽了PermGen空间。我已经进行了通常的调整(将PermGen调整为256M,启用了类GC,等等),但是没有骰子。 有人愿意推荐一些(可能是免费或非常便宜的)工具来解决Groovy和/或Java中的这种内存消耗问题吗?还是您用来解决JVM内存问题的某些技术? 编辑:这是在生产模

  • 问题内容: 也许最典型的例子是JDBC关闭方式错误,并且未正确处理可能的异常。我很好奇看到您看到的其他示例-最好与Web应用程序相关。 那么,Java中是否有任何常见的泄漏模式? 问题答案: 根据我的经验,两个关键的“有效泄漏”模式是: 静力学和单例随着时间的推移逐渐增长。这可能包括缓存,实现不当和未使用的连接池,“自启动以来我们见过的每个用户”的字典等 从寿命长的对象到 打算 是寿命短的对象的引