IOS的内存使用有以下几个等级,最常见的就是OSMemoryNotificationLevelWarning  OSMemoryNotificationLevelUrgent

typedef enum {

    OSMemoryNotificationLevelAny      = -1,

    OSMemoryNotificationLevelNormal   =  0,

    OSMemoryNotificationLevelWarning  =  1,

    OSMemoryNotificationLevelUrgent   =  2,

    OSMemoryNotificationLevelCritical =  3

    } OSMemoryNotificationLevel;

Iphone4 设备中内存512M,一般在应用使用内存达到50M(这个数据有可能不准确),会收到第一次内存警告,在达到200M多点,会收到第二次内存警告,这个时候手机直接强制关闭应用,就是我们常说的闪退。等级3是更为严重的内存警告,这种情况下,IOS系统直接接管手机,开始对内存进行管理,这个时候手机甚至有可能会重启。
在哪些地方处理这些警告:
(1)在应用程序的AppDelegate方法中可以回调:
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{   处理内存警告方法  }
(2)视图控制器
- (void)didReceiveMemoryWarning
(3)通知
UIApplicationDidReceiveMemoryWarningNotification通知,凡是在通知中心注册了UIApplicationDidReceiveMemoryWarningNotification通知的类都会接收到内存警告通知。
循环引用、交叉引用:
对象能销毁的基本原则是没有对象对这个资源进行强引用或者持有。
看一个经典的循环引用的例子:
首先在self中定义一个强引用对象:

@property(nonatomic, strong) NSMutableArray *Test;

那么表示self对Test是强持有的。

然后定义一个Block

int(^Block)() = ^() {

return [self Block:];

};

这里Block对self强持有。

如果这时我们添加了添加了代码:

[self.Test addObject:Block]

表明Test对Block强持有

同样交叉引用也是这样,A B类相互持有对象,导致对象无法销毁。解决的办法:

__weak DemoObj *weakSelf =self;

return[weakSelf Block:];

交叉引用时,两个对象中 属性设置为weak。

IOS小知识点5之内存警告、循环引用、交叉引用相关推荐

  1. iOS小知识点(非UI部分)

    1. _cmd 表示当前方法的@SEL指针, - (void)putString{} 对于这个函数_cmd 等效于@selector(putString) 转载于:https://www.cnblog ...

  2. iOS内存警告和内存优化集合二

    iphone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送Memory Warning消息.收到此消息后,app必须正确处理,否则可能出错或者出现内存泄露 ...

  3. iOS 真机模拟内存警告

    //联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪哄 一.概念 1.内存警告原理 *iphone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送 ...

  4. IOS 一些小知识点整理

    NSArray 类定义的方法 1.  makeObjectsPerformSelector:@select(aMethod) 让数组中的每个元素 都调用 aMethod 2. makeObjectsP ...

  5. iOS开发实战小知识点(四)

    一. iOS 连续多次 Present VC,dismiss 之后可能异常 记住: 谁present 谁dismiss. 我们习惯都是在presented VC直接dismiss的,一般不会出现问题, ...

  6. 再来IOS开发小知识点总结

    一.获取当前日期和星期 // get the current date NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [d ...

  7. UE4小知识点总结合集【二】

    UE4小知识点总结合集[二] https://blog.csdn.net/weixin_43704737/article/details/102739968 UE4好用的快捷键[慢慢收集] UE4怎么 ...

  8. (转载)深入了解iOS中的OOM(低内存崩溃)

    英文原文:https://programmer.ink/think/learn-more-about-oom-low-memory-crash-in-ios.html 中文翻译:https://www ...

  9. iOS之深入解析Memory内存

    一.前言 iOS 是基于 BSD 发展而来,理解一般的桌面操作系统的内存机制是非常有必要的.在此基础之上,进一步在 iOS 系统层面进行分析,包括 iOS 整体的内存机制,以及 iOS 系统运行时的内 ...

最新文章

  1. Leetcode 220. 存在重复元素 III 解题思路及C++实现
  2. [Linux]Linux下网络配置文件总结(转)
  3. mybatis中mysql流式读取_MyBatis读取大量数据(流式读取)
  4. linux加密框架 crypto 算法管理 - 算法查找接口
  5. java字典树(Trie)实现中文模糊匹配
  6. mysql 出现 quot_MYSQL 新版出现 Client does_mysql _ 搞代码
  7. SEH in ASM 研究(一)
  8. SpringBoot整合AOP + 自定义注解实现简单的权限验证
  9. 贪心算法——洛谷(P3817)小A的糖果
  10. Ibator生成iBATIS配置文件 DO及DAO操作记录
  11. 小米11系列顶配版曝光:骁龙888加持 代号“star”!
  12. PreparedStatement JDBC域处理/SQl攻击
  13. 学计算机的副部级,中国31所副部级大学排名
  14. 互联网的世界安全吗?且行且珍惜
  15. 手机怎么压缩gif动图大小?推荐一款gif压缩的工具
  16. 台式机win10正确安装Realtek声卡驱动后右下角的小喇叭还是有一个红差,前置耳机无法使用
  17. 5. 位操作指令 AND,ORR, TST,BIC
  18. 人工智能入门四件套,你学人工智能避不开的知识点
  19. matlab计算矩阵的相关系数矩阵,计算二维矩阵的相关系数
  20. 迅为RK3588开发板Linux安卓12瑞芯微ARM核心板人工智能工业AI主板

热门文章

  1. VBA 根据股票代码查询价格
  2. larval框架的获取并存储(cache的使用)
  3. 矩阵并行加速之NENO与SSE
  4. 用html做高考加油网页,大学学长制作励志视频为高三学子加油
  5. 常用路由协议的分析及比较/RIP/IGRP/OSPF/BGP
  6. Lambert (兰伯特)光照模型
  7. 物质是世界,能量是本质
  8. 汽车内饰胶市场现状及未来发展趋势
  9. BeanUtils怎么没有populate方法
  10. mac java 安装教程_MAC安装JDK详细教程