黑马程序员-----OC内存管理(三)

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

循环引用
1>使用场景
对于循环依赖关系来说,比方A类引用B类,同时B类引用A类,可能造成,A和B类相互import头文件,即相互拷贝,这个是不允许的。
2>解决方案
一端用retain,一端用assign
3>实例代码
//Card.h
@class Person;
@interface Card : NSObject
@property (nonatomic, assign) Person *person;
@end

//Card.m
#import "Person.h"
@implementation Card

- (void)dealloc
{
 NSlog(@"Card被销毁");
 [super dealloc];
}
@end

//Person.h
@class Card;
@interface Person : NSObject
@property (nonatomic, retain) Card *card;
@end

//Person.m
#import "Card.h"
@implementation

- (void)dealloc
{
 NSlog(@"Person被销毁");
 [_card release];
 [super dealloc];
}
@end

//main.m
int main()
{
 //p-1
 Person *p = [[Person alloc] init];
 //c-1
 Card *c = [[Card alloc] init];

 //c-2
 p.card = c;
 //p-1 
 c.person = p;

 //c-1
 [c release];
 //p-0,c-0
 [p release];
 return 0;
}
4>小零碎
①在.h文件中用@class来声明类,在.m文件中#import来包含该类的所有方法。
②循环引用(A,B类相互引用)的解决方案:一端用retain,一端用assign。

 

 

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值