@class关键字/初始化

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

 

posted @ 2015-06-25 08:46  sirzhang  阅读(117)  评论(0)    收藏  举报
AmazingCounters.com