//
// 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;
}