Objective-C内存管理第四弹:循环引用
2015-12-13 21:47
441 查看
//main.m
//Person.h
//Person.m
//Dog.h
//Dog.m
/* 循环引用会导致两方均不能成功释放。 多个对象之间不能形成封闭的环 若出现这个封闭环所有对象都不会被释放 解决方法: 其中一端必须是assign A(_B)->>>>>>>>>>B(_C) | | | | | | | | | | D(_A)<<<<<<<<<<-C(_D) */ #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { //循环引用中两个对象均未成功释放 // Person * person = [[Person alloc] init]; // person.name = @"小花花"; // // Dog * dog = [[Dog alloc] init]; // person.dog = dog; // // dog.person = person; // // [person release]; // [dog release]; Person * person = [[Person alloc] init]; person.name = @"小花花"; Dog * dog = [[Dog alloc] init]; person.dog = dog; dog.person = person; [person release]; [dog release]; return 0; }
//Person.h
#import <Foundation/Foundation.h> #import "Dog.h" @interface Person : NSObject //名字: @property (nonatomic, copy) NSString * name; //狗 @property (nonatomic, retain) Dog * dog; @end
//Person.m
#import "Person.h" @implementation Person - (void)dealloc { NSLog(@"%s", __func__); self.name = nil; self.dog = nil; [super dealloc]; } @end
//Dog.h
#import <Foundation/Foundation.h> @class Person; @interface Dog : NSObject //@property (nonatomic, retain) Person * person; //当存在循环引用的时候,其中一方必须是assign @property (nonatomic, assign) Person * person; @end
//Dog.m
#import "Dog.h" #import "Person.h" @implementation Dog - (void)dealloc { self.person = nil; NSLog(@"%s", __func__); [super dealloc]; } @end
相关文章推荐
- Objective-C规范注释心得——同时兼容appledoc(docset、html)与doxygen(html、pdf)的文档生成
- Objective-C内存管理第三弹:@property的使用
- Objective-C内存管理第二弹:多个对象的内存管理
- Objective-C内存管理第一弹:引用计数
- Objective-C 之 KVO 详解
- Js中Prototype、__proto__、Constructor、Object、Function关系介绍
- iOS -- 查看系统版本(objective-c)
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- Objective-C:NSSet和NSMutbaleSet的用法
- 10个迷惑新手的Cocoa&Objective-c开发问题
- This qt version uses an unsupported makefile generator object reference not set to an instance of an
- Objective-C语言——NSMutableString可变字符串
- View.setTag(key,object)的使用
- Objective-C语言——NSString不可变字符串
- 《Interactive graph cuts for optimal boundary & region segmentation of objects in N-D images》读后感及问题
- Dumping a C++ object's memory layout with Clang
- net.sf.json.JSONObject 和org.json.JSONObject 的差别(转)
- JSONObject简介 (转)
- libstdc++.so.5: cannot open shared object file: No such file or directory
- objective-c初始化问题