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
原创粉丝点击