//
// main.m
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Car.h"
#import "Person.h"
int main(int argc, const char * argv[]) {
/*
两个类 如果相互引用,那么就会造成死循环
解决办法:如果要用到某个类 使用@class关键字,例子如下;
Person类和Car类
*/
Car *c = [[Car alloc]init];
Person *p = [[Person alloc]init];
[p setName:@"wang"];
[c runPerson:p andAddress:@"人民广场"];
return 0;
}
//
// Person.h
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Car.h"
@interface Person : NSObject
{
Car *_car; // 这里是让某人拥有一辆车
}
@property NSString * name;
// 车跑的方法
- (void)run;
@end
//
// Person.m
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)run
{
NSLog(@"车在跑啊!");
}
- (NSString *)description
{
return _name;
}
@end
//
// Car.h
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
//#import "Person.h"
// 但是这里如果引用Person类就会造成和Car类的相互引用问题。那么我们可用class
@class Person; // 仅仅用于告诉编译器Person是个类
@interface Car : NSObject
// 这个方法功能是:某人开车到某地,那么这里就需要调用Person类
- (void)runPerson:(Person *)person andAddress:(NSString *)address;
@end
//
// Car.m
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Car.h"
#import "Person.h"
@implementation Car
- (void)runPerson:(Person *)person andAddress:(NSString *)address
{
[person run]; // 这里用到了Person对象的方法,但是头文件中没有引用Person类,
// 可是可以在.m文件中引用,这样不会相互引用,造成死循环
NSLog(@"%@ 开车到 %@ 去", person, address);
}
@end
// main.m
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Car.h"
#import "Person.h"
int main(int argc, const char * argv[]) {
/*
两个类 如果相互引用,那么就会造成死循环
解决办法:如果要用到某个类 使用@class关键字,例子如下;
Person类和Car类
*/
Car *c = [[Car alloc]init];
Person *p = [[Person alloc]init];
[p setName:@"wang"];
[c runPerson:p andAddress:@"人民广场"];
return 0;
}
//
// Person.h
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Car.h"
@interface Person : NSObject
{
Car *_car; // 这里是让某人拥有一辆车
}
@property NSString * name;
// 车跑的方法
- (void)run;
@end
//
// Person.m
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
@implementation Person
- (void)run
{
NSLog(@"车在跑啊!");
}
- (NSString *)description
{
return _name;
}
@end
//
// Car.h
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
//#import "Person.h"
// 但是这里如果引用Person类就会造成和Car类的相互引用问题。那么我们可用class
@class Person; // 仅仅用于告诉编译器Person是个类
@interface Car : NSObject
// 这个方法功能是:某人开车到某地,那么这里就需要调用Person类
- (void)runPerson:(Person *)person andAddress:(NSString *)address;
@end
//
// Car.m
// 类的互引用
//
// Created by admin on 15/7/29.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Car.h"
#import "Person.h"
@implementation Car
- (void)runPerson:(Person *)person andAddress:(NSString *)address
{
[person run]; // 这里用到了Person对象的方法,但是头文件中没有引用Person类,
// 可是可以在.m文件中引用,这样不会相互引用,造成死循环
NSLog(@"%@ 开车到 %@ 去", person, address);
}
@end