循环引用的问题...

150 篇文章 0 订阅


main.m

#import "Car.h"
#import "Person.h"
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
	@autoreleasepool {
		Person * p = [[Person alloc] init];
		Car * car = [[Car alloc] init]; //@class 只是objcet

		p.car = car;
		// [car release];

		[p play]; //如果提前release car 依然能用 , 因为是用retain修饰的

		car.person = p;
		[p release];
		[car run]; // 就不能用了,因为是 assign修饰的
			   /*
            那循环引用中的 两个对象 到底该修饰谁为 retain , 谁assign呢?
            需要考虑主次关系,本例中,从现实中考虑 人没了,车就动不了,所以 [p release]之后 [car run]就动不了,所以
            @property (nonatomic,assign) Person * person 
         
         */
	}
	return 0;
}


Person.h

#import <Foundation/Foundation.h>
@class Car;
@interface Person : NSObject
@property(nonatomic,retain) Car *car; //不知道类型 所以提示 想要用retain就必须是object type
- (void)play;
@end


Person.m

#import "Car.h"
#import "Person.h"
@implementation Person

- (void)dealloc {
	[_car release];
	[super dealloc];
    NSLog(@"person dealloc");
}

- (void)play
{
    NSLog(@"Person is play,%@",_car);
}

@end


Car.h

/*
 @class Car;
 @interface Person : NSObject
 @property(nonatomic,retain) Car *car;

 @end
 */
#import <Foundation/Foundation.h>
@class Person;
@interface Car : NSObject
/** person */
@property (nonatomic,assign) Person * person;
- (void)run;
@end


Car.m

#import "Car.h"
#import "Person.h"
@implementation Car
- (void)dealloc {
//	[_person release];
	[super dealloc];
    NSLog(@"car dealloc");
}
- (void)run{
    NSLog(@"running %@",_person);
}
@end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值