// // classB.h // OC5-@class关键字 // // Created by qianfeng on 15/6/24. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import <Foundation/Foundation.h> #import "classA.h" @interface classB : NSObject { classA *_a; // NSString *_string; } @property (copy,nonatomic)NSString *nameB; @property (copy,nonatomic)NSString *string; -(void)printClassB; @end // // classB.m // OC5-@class关键字 // // Created by qianfeng on 15/6/24. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "classB.h" @implementation classB -(void)printClassB { //NSLog(@"name= %@",_a.nameA); NSLog(@"name= %@",[self string]); } @end // // classA.h // OC5-@class关键字 // // Created by qianfeng on 15/6/24. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import <Foundation/Foundation.h> //#import "classB.h" @class classB; //只引用类的类型,不引用类的方法 @interface classA : NSObject { classB *_b; } @property (copy,nonatomic)NSString *nameA; -(void)printClassA; -(id)init; @end // // classA.m // OC5-@class关键字 // // Created by qianfeng on 15/6/24. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "classA.h" #import "classB.h"//如果需要clss中的方法需要用#import "classB.h",因为编译器只编译.h文件,所以在这里导入classB.h不会引起循环链 @implementation classA -(id)init { if(self=[super init]) { _b=[[classB alloc] init]; } return self; } -(void)printClassA { //NSLog(@"%@",_b.nameB);//就是调用_b对象的nameB方法.(getNameB) //NSLog(@"%@",_b.printClassB); //[_b printClassB]; [_b setString:@"21"]; NSLog(@"%@",[_b string]); [_b setNameB:@"222"]; [_b printClassB]; } @end // // main.m // OC5-@class关键字 // // Created by qianfeng on 15/6/24. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import <Foundation/Foundation.h> #import "classA.h" #import "classB.h" //@import 关键字, 引用类的类型及类中的定义的方法,包含在头文件中,可能引起循环包含.需要用@class打断循环链 //@class 只引用类的类型不引用类中的方法.如果要使用类中的方法,需要在对应的.m文件中用#import包含 int main(int argc, const char * argv[]) { @autoreleasepool { classA *a=[[classA alloc] init]; [a printClassA]; } return 0; }