Objective-C:对象之间循环引用会造成死循环
// A.h
// 02-循环引用
//
// Created by ma c on 15/8/14.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
//类的前向声明(只存在包含关系中)
@class B;
@interface A : NSObject
@property(nonatomic,retain)B *b;//A获得b对象的所有权
@end
------------------------------------------------------- // A.m
// 02-循环引用
//
// Created by ma c on 15/8/14.
// Copyright (c) 2015年. All rights reserved.
// #import "A.h"
#import "B.h"
@implementation A
-(void)dealloc
{
[_b release];
NSLog(@"A dealloc");
[super dealloc];
}
@end
类B:
// B.h
// 02-循环引用
//
// Created by ma c on 15/8/14.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
@class A;
@interface B : NSObject
@property(nonatomic,retain)A *a;//B获得a对象所有权
@end ------------------------------------------------------------ // B.m
// 02-循环引用
//
// Created by ma c on 15/8/14.
// Copyright (c) 2015年. All rights reserved.
// #import "B.h"
#import "A.h"
@implementation B
-(void)dealloc
{
//[_a release];
NSLog(@"B dealloc");
[super dealloc];
}
@end
主函数测试:
// main.m
// 02-循环引用
//
// Created by ma c on 15/8/14.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "A.h"
#import "B.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//测试对象间的循环引用
A *a = [[A alloc]init];
B *b = [[B alloc]init]; [a setB:b];
[b setA:a]; [a release];
[b release]; }
return ;
}
测试结果是:
Program ended with exit code:
上面的结果明显的a和b对象都没有成功释放内存而销毁,因为它们都是retain获得对方的所有权,谁都不肯先释放;
处理方法:将双方任意一方的对象属性retain做一下修改即可,改为assign
修改后测试结果如下:
-- ::27.210 -循环引用[:] A dealloc
-- ::27.211 -循环引用[:] B dealloc
Program ended with exit code:
Objective-C:对象之间循环引用会造成死循环的更多相关文章
- Python对象的循环引用问题
目录 Python对象循环引用 循环引用垃圾回收算法 容器对象 生成容器对象 追踪容器对象 结束追踪容器对象 分代容器对象链表 何时执行循环引用垃圾回收 循环引用的垃圾回收 循环引用中的终结器 pyt ...
- SQL Server 查看对象之间的引用关系
前期准备: use studioA; go create table T(X int,Y int); insert into T(X,Y) values(1,1),(2,2); ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少分配率, 最重要的规则,缩短对象的生命周期,减少对象层次的深度,减少对象之间的引用,避免钉住对象(Pinning)
减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检 ...
- 对象之间的引用传递 之 .NET中的深拷贝和浅拷贝
1.场景 首先,场景是这样的. 有一个Person类,类中有一个类型是Car的属性.用于表述,人开的车. Car类中有一些描述诸如汽车拼盘之类的属性.基本场景就是这样. 2.浅拷贝 Person ...
- c# 项目之间循环引用vs弹窗提醒
circular dependencies in projects' graph ! Projects in cycle are:ProjectImp(Name:FrameWork.Entity,Pl ...
- typescript解决深度拷贝中循环引用引起的死循环
循环引用有人说就是一种不健康的状态,即你中有我,我中有你 hasObj: any = []; deepCopy(data: any) { this.hasObj.push(data); //最终就是返 ...
- 序列化类型为“System.Data.Entity.DynamicProxies..."对象时检测到循环引用
这是因为EF外键引起的序列化问题. 解决方案: context.Configuration.ProxyCreationEnabled = false; 这里我用的是一个基类控制器用于被继承 返回EF实 ...
- 用JSON.stringify处理循环引用对象
通常,我们会用JSON.stringify把Javascript对象序列化成JSON格式,这在大多数情况下是够用的.但是,当你要转换的对象里存在循环引用时,问题就来了. js对象循环引用导致内存泄漏 ...
- javascript中的循环引用对象处理
先说明一下什么是循环引用对象: var a={"name":"zzz"}; var b={"name":"vvv"}; ...
随机推荐
- Ubuntu 17.04 搭建 NodeJS
可以在云主机上执行以下的命令: apt-get update apt-get install -y python-software-properties software-properties-com ...
- 1011 World Cup Betting (20)(20 point(s))
problem With the 2010 FIFA World Cup running, football fans the world over were becoming increasingl ...
- getJSON获取JSON文件加载下拉框及动态验证比输入项
1.html界面 <form action="" method="get"> <div class="form-group" ...
- Centos 安装 Wireshark
Wireshark是一款数据包识别软件,应用很广泛. yum install wireshark yum install wireshark-gnome
- 怎么处理stdClass::__set_state
处理后 处理方法 function object2array_pre(&$object) { if (is_object($object)) { $arr = (array)($object) ...
- bzoj 4242 水壶 (多源最短路+最小生成树+启发式合并)
4242: 水壶 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 1028 Solved: 261[Submit][Status][Discuss] ...
- CentOS系统下中文文件名乱码
原文来自:http://www.zhukun.net/archives/7434 CentOS系统下中文文件名乱码 2014/09/01Linux运维centos.Linuxbear 从windows ...
- 在Hexo中渲染MathJax数学公式
最近学机器学习涉及很多的数学公式,公式如果用截图显示,会比较low而且不方便.因此需要对Hexo做些配置,支持公式渲染.同时文末整理了各种公式的书写心得,比如矩阵.大小括号.手动编号.上下角标和多行对 ...
- python开发_tkinter_复选菜单
在之前的blog中有提到python的tkinter中的菜单操作 python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推荐 python开发_tkinter_窗口控件_自 ...
- HDU 5715 XOR 游戏 二分+字典树
XOR 游戏 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5715 Description 众所周知,度度熊喜欢XOR运算(XOR百科). 今天,它 ...