黑马程序员技术交流社区
标题:
循环引用下的内存管理-笔记分享
[打印本页]
作者:
liulunjiang
时间:
2015-10-25 12:14
标题:
循环引用下的内存管理-笔记分享
Person类,Dog类循环引用,重写dealloc方法,完成内存管理
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p=[[Person alloc]init];//p 1
Dog *d=[[Dog alloc]init];//d 1
p.dog=d;//p 2
d.owner=p;//d 1
[p cook];
[d run];
[d release];//d 1
[p release];//d 0 p 0
}
return 0;
}
复制代码
Person.h
#import <Foundation/Foundation.h>
//#import "Dog.h"
@class Dog;
@interface Person : NSObject
@property(nonatomic,retain) Dog *dog;
-(void)cook;
@end
复制代码
Person.m
#import "Person.h"
@implementation Person
-(void)dealloc{
[_dog release];
NSLog(@"person----dealloc!");
[super dealloc];
}
-(void)cook{
NSLog(@"cooking");
}
@end
复制代码
Dog.h
#import <Foundation/Foundation.h>
//#import "Person.h"
@class Person;
@interface Dog : NSObject
@property(nonatomic,assign) Person *owner;
-(void)run;
@end
复制代码
Dog.m
@implementation Dog
-(void)dealloc{
// [_owner release];//因为p获取d用的是retain,而d获取p用的是assign,所以不需要这句
NSLog(@"dog----dealloc");
[super dealloc];
}
-(void)run{
NSLog(@"running");
}
@end
复制代码
作者:
StillSad
时间:
2015-10-25 12:35
赞一个!
作者:
liulunjiang
时间:
2015-10-26 08:31
StillSad 发表于 2015-10-25 12:35
赞一个!
{:2_36:}{:2_36:}{:2_36:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2