你的位置:首页 > 软件开发 > 操作系统 > iOS 内存管理机制和循环引用处理方法

iOS 内存管理机制和循环引用处理方法

发布时间:2016-09-02 15:00:08
简述ARC: 自动引用计数, Automatic Reference CountingMRC: Mannul Reference Counting ARC工作原理1.当每次创建一个新实例时,ARC会分配一块内存用来存储实例信息,在内存中会包含实例的类型信息,以及这个实例所有的 ...

简述

ARC: 自动引用计数, Automatic Reference Counting

MRC: Mannul Reference Counting

 

ARC工作原理

1.当每次创建一个新实例时,ARC会分配一块内存用来存储实例信息,在内存中会包含实例的类型信息,以及这个实例所有的相关属性的值。

2.如果该实例不再被使用时,ARC会自动释放实例所占用的内存,并让释放的内存存储其他的数据。这样能保证使用的实例不会一直占用内存空间。

3.ARC收回和释放了正在被使用的实例,该实例的属性和方法将不能再被访问和调用,一旦尝试调用,会造成应用程序的崩溃

4.为了保证使用中的实例不会被销毁,ARC会跟踪和计算每一个实例被多少属性,常量和变量所引用,一旦有引用,都会对实例创建强引用。强引用会将实例牢牢的保持住,只要强引用还在,实例就不会被销毁。

 

循环强引用问题

循环强引用是指两个对象相互进行创建了强引用,这样的话2个实例的内存将永远不会被释放。

这样的话会造成内存泄漏。可以通过弱引用(Weak Reference)或无主引用(Unowned Reference)解决这个问题。

 

代码中常用写法

OC

//定义一个宏#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) {    }

原标题:iOS 内存管理机制和循环引用处理方法

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。