循环引用的问题...

来源:互联网 发布:新东方少儿编程培训 编辑:程序博客网 时间:2024/05/18 03:05


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 只是objcetp.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
原创粉丝点击