Objective-C内存管理第四弹:循环引用
来源:互联网 发布:netsnmp windows 编辑:程序博客网 时间:2024/06/07 20:01
//main.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
0 0
- Objective-C内存管理第四弹:循环引用
- Effective Objective-C(第29-36条)内存管理篇,ARC、循环引用、引用计数
- Objective-C内存管理第一弹:引用计数
- Objective-C内存管理之引用计数
- Objective-c 内存管理-MRC 引用计数器
- objective-c基础语法学习之--(6)内存管理经典问题:循环引用
- 【Objective-C高级编程】iOS与OS X多线程和内存管理(九) Block 循环引用
- objective-c---SEL、内存管理(引用计数器、野指针、@property参数、循环retain、autorelease)
- Objective-c 循环引用
- Objective-C 循环引用
- Objective-C—引用计数器、多个对象之间的内存管理、set方法的内存管理、@property参数、循环引用
- Objective-C(十五、内存管理,MRC,循环引用,dealloc和setter方法)——iOS开发基础
- objective-C 的内存管理之-引用计数
- objective-C 的内存管理之-引用计数
- Objective-C内存管理之引用计数(一)
- Objective-C内存管理详解——引用计数
- Objective-C - 循环引用问题
- objective-c内存管理
- cocos2dx 3.0怎么导入模板到vs2013/创建新工程
- golang错误处理之panic和recover
- 产品之路(一)---产品设计九步
- 如何提高中央空调机组运行性能
- 二叉树的链表存储
- Objective-C内存管理第四弹:循环引用
- ZooKeeper 典型应用场景一览
- LDA perplexity计算
- Android基础之Handler
- hdoj1050 Moving Tables
- 带头节点链表和不带头节点链表的初始化
- 光照_向量点积_背面剔除
- RESTORE数据时10G+ASM遇到ORA-4031及ORA-00600 KSSRMP1错误
- 哈夫曼树的定义和基本概念(从百度百科copy)