iOS 优化iOS精品文章

iOS内存管理及优化

2016-07-20  本文已影响719人  Mystical

iOS内存管理的基本介绍:

Clean Memory:闪存中有备份,能再次读取重建。
例如:Code、framework、memory-mapped files(内存映射文件)
Dity Memory:所有非Clean Memory,在堆内存中,系统无法自动回收。
例如:caches、堆上分配的对象

关于CleanMemory和Dity Memory举个例子:
- (void)memoryAnalyse{
NSString *str1 = [NSString stringWithString:@"Hello"];//1
NSString *str2 = @"Hello";//2
char *buf = malloc(100 * 1024 * 1024);//3
for (int i = 0; i < 5 * 1024 * 1024; i ++) {
buf[i]=rand();//4
}
}
逐行分析上面代码:

  1. Dity Memory:函数stringWithString内存是分配在堆上的
  2. Clean Memory:分配在只读数据段
  3. Clean Memory:buf指向的是100M虚拟内存,只有在使用时,才会映射到物理内存上(对比第四行能更清楚理解这一问题)
  4. Clean Memory+Dity Memory:前5M为Dity,后95M为Clean

iOS内存段介绍:

内存段.png

常用的内存优化方法

  1. 在应用程序委托中实现applicationDidReceiveMemoryWarning:方法: 应用程序委托对象中接收内存警告消息
  2. 在UIViewController子类中实现didReceiveMemoryWarning方法:视图控制器中接收内存警告消息
  3. 注册UIApplicationDidReceiveMemoryWarningNotification通知:
    其它类中使用通知接收内存警告消息

收到内存警告,一般有以下几种处理方法:

  1. 尽可能多的释放资源,尤其是图片等占用内存较多的
  2. 释放掉单例对象
  3. iOS6之后对于隐藏的viewController直接设置self.view=nil

参考资料:

iOS内存管理及优化-腾讯庄延军
alloc、init你弄懂50%了吗?

上一篇下一篇

猜你喜欢

热点阅读