iOS 内存管理机制和循环引用处理方法
简述
ARC: 自动引用计数, Automatic Reference Counting
MRC: Mannul Reference Counting
ARC工作原理
1.当每次创建一个新实例时,ARC会分配一块内存用来存储实例信息,在内存中会包含实例的类型信息,以及这个实例所有的相关属性的值。
2.如果该实例不再被使用时,ARC会自动释放实例所占用的内存,并让释放的内存存储其他的数据。这样能保证使用的实例不会一直占用内存空间。
3.ARC收回和释放了正在被使用的实例,该实例的属性和方法将不能再被访问和调用,一旦尝试调用,会造成应用程序的崩溃
4.为了保证使用中的实例不会被销毁,ARC会跟踪和计算每一个实例被多少属性,常量和变量所引用,一旦有引用,都会对实例创建强引用。强引用会将实例牢牢的保持住,只要强引用还在,实例就不会被销毁。
循环强引用问题
循环强引用是指两个对象相互进行创建了强引用,这样的话2个实例的内存将永远不会被释放。
这样的话会造成内存泄漏。可以通过弱引用(Weak Reference)或无主引用(Unowned Reference)解决这个问题。
代码中常用写法
OC
1 2 3 4 5 6 7 8 9 10 | //定义一个宏 #define WS(weakSelf) __weak __typeof(&*self)weakSelf = self; //调用的时候 WS(weakSelf); [XPApiManager getVideoListWithType: self .listType pageIndex: self .pageIndex pageSize: self .pageSize progress:^( NSProgress *progress) { [weakSelf.tableView reloadData]; } finished:^( NSString *msg, id responseObject) { } |
1 2 3 | @property (weak, nonatomic ) id <XPDetailMenuPopViewDelegate> delegate; @property (weak, nonatomic ) IBOutlet UIImageView *imgFavorite; |
Swift
1 2 3 4 | lazy var strHTML : () - > String = { [ unowned self ] in //代码编写区<br> self.XXX } |
1 2 3 | XPHomeViewModel . loadCategoryGroup { [ weak self ] ( outGroups ) in self !. outGroups = outGroups } |
1 2 3 4 | weak var tmpSelf = self CouponData . loadCouponData { ( data , error ) - > Void in tmpSelf !. couponTableView ?. reloadData () } |
1 2 3 | weak var delegate : YMCategoryBottomViewDelegate ? @IBOutlet weak var tableView : UITableView ! |
补充参见:
专注iOS、Golang开发。
技术博客:http://xiaopin.cnblogs.com
分类:
iOS
, iOS 常用小知识点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2011-09-02 sql日期操作收集
2011-09-02 全文索引工作收集
2011-09-02 数据库中一些简单的防刷机制
2010-09-02 110个Oracle常用函数整理汇总