ARC-循环引用-解决办法

一,循环引用最常见的代码类型。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSMutableArray *firstArray=[[NSMutableArray alloc]init];
    NSMutableArray *secondArray=[[NSMutableArray alloc]init];
    [firstArray addObject:secondArray];
    [secondArray addObject:firstArray];

}

二,循环引用的解决办法。

1,程序员手动断开一个环,停止循环引用。

2,弱引用。因为弱引用持有对象,但不增加引用计数。可以避免循环引用的产生。

三,弱引用避免循环引用的常见例子。

有两个ViewController,这两个ViewController之间需要互相传数据。这时候,ViewController的delegate成员变量通常是一个弱引用。目的是为了避免两个ViewController之间循环引用。

参考资料:《iOS开发时阶》 -唐巧

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-07 11:38:36

ARC-循环引用-解决办法的相关文章

浅谈 关于ARC循环引用得问题

这段时间在研究关于ARC得循环引用导致变量不能释放,在此先介绍一本书英文书: <Pro Multithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks> (<iOS与OS X多线程和内存管理>) 建议读英文原版,中文版看的我稀里糊涂的,后来被迫去看原版.这本书介绍了关于ARC的自动引用机制,这里的机制类似:当C语言的局部变量离开他的作用域之后就会被清

EntityFramework Model有外键时,Json提示循环引用 解决方法

正文之前先说两句,距离上篇博客已将近两个月,这方面的学习和探索并没有停止,而是前进道路上遇上了各种各样的问题,需要不断的整理.反思和优化,这段时间的成果,将在最近陆续整理发出来. 个人感觉国内心态太浮躁了,很少有能深入研究下去并将自己经验分享的人,可能很忙,也可能嫌麻烦.特别是面向新技术,尤其是在学习资料有限的情况下,愿意花费时间摸索和分享的人实在太少太少,遇到问题,搜索结果一抓一大把,但是往往都是转载,连最起码的自己验证都没有,结果就是以讹传讹,不仅对解决问题无用,反而容易产生误导.最近这段时

shared_ptr造成的循环引用&amp;&amp;解决方法和原理(弱引用&amp;&amp;强引用)

 弱用指针的方式解决shared_ptr造成的循环引用防止内存泄漏! <***>循环引用就是由于智能指针shared_ptr造成的,下面就是shared_ptr的使用造成循环引用的图解: <****>举个例子来说下shared_ptr造成的循环引用: (选题背景双向链表) <span style="font-size:18px;">#include<memory> #include<iostream> using namesp

python各个模块循环引用问题解决办法

当项目中的模块过多,或功能划分不够清晰时会出现循环引用的问题,如下 有两个模块moduleA 和 moduleB: #moduleA from moduleB import b def a(): print 'aaaaaaaa' b() def c(): print 'cccc' if __name__ == '__main__': a() #moduleB from moduleA import c def b(): print 'bbbbbbbbbb' c() 这种情况下就会出现以下的错误

清空数据库错误:因为该表正由 FOREIGN KEY 约束引用 解决办法

如下解决了五个问题 1. 清空数据 2. 有外键也可以, 因为是逆向删除, 从最后一张表删除. 且使用的是delete, 因为truncate不能对有外键的表 3. 种子问题, 如果表存在种子重设为0, 如不存在就不操作 4. 加了事务, 中间报错, 有后悔机会 5. 截断日志功能, 因为使用delete, 删除后日志文件会增大, 可以不使用 if( object_id('pr_DataClear') is not null ) drop procedure pr_DataClear go cr

codeblocks 多线程 pthread_create 函数未定义引用 解决办法

出现这种情况 要么函数名字写错 要么就是找不到定义函数的文件,在linux下面的多线程 pthread不是默认到库 需要自己链接下. 1. 可以在终端 编译: gcc pthread.c -lpthread -o pthread 2.可以在IDE 下面配置: Setting -> Compiler and debugger -> Linker Setting 根据自己的库的位置:ubuntu 12.04位置 可解决!

小结OC中Retain cycle(循环引用)

retain cycle 的产生 说到retain cycle,首先要提一下Objective-C的内存管理机制. 作为C语言的超集,Objective-C延续了C语言中手动管理内存的方式,但是区别于C++的极其非人道的内存管理,Objective-C提出了一些机制来减少内存管理的难度. 比如:内存计数. 在 Objective-C中,凡是继承自NSObject的类都提供了两种方法,retain和release.当我们调用一个对象的retain时,这个 对象的内存计数加1,反之,当我们调用rel

swift详解之九---------------自动引用计数、循环引用

自动引用计数.循环引用(这个必须理解,必须看) 注:本文详细介绍自动引用计数,以及各种循环引用问题.一网打尽! 1. 自动引用计数原理 Swift 使用ARC机制来跟踪和管理你的内存,一般情况下,Swift 的内存管理机制会一直起着作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用的内存. 然而,在少数情况下,ARC 为了能帮助你管理内存,需要更多的关于你的代码之间关系的信息.本章描述了这些情况,并且为你示范怎样启用 ARC 来管理你的应用程序的内存. 为了确保在

OC中常见的循环引用总结

定义:循环引用可以简单理解为A引用了B,而B又引用了A,双方都同时保持对方的一个引用,导致任何时候引用计数都不为0,始终无法释放: 造成循环引用的三种情况 计时器NSTimer 原因分析: NSTimer变量通过target对xxxModel有强引用,NSTimer变量是xxxModel内部的成员变量,所以xxxModel对该成员变量有强引用  解决办法: 提供类似cleanTimer的公开方法,让外界主动调用释放NSTimer变量 block 原因分析: 某个类将block作为自己的属性变量,