20150624_OC之@class关键字

来源:互联网 发布:从来绝色知难得打一字 编辑:程序博客网 时间:2024/06/01 22:24

@Class关键字的使用及与#import的区别:

////  ClassA.h//  IOS150624_ObjectiveC_@class关键字////  Created by PengJunlong on 15/6/24.//  Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>//#import "ClassB.h"  //会有循环链的存在,导致编译无法展开,(ClassA与ClassB相互引用)@class ClassB;@interface ClassA : NSObject{    ClassB *_classB;}@property (copy,nonatomic)NSString *name;- (void)setClassB:(ClassB *)classb;- (void)printClassBInClassA;@end

////  ClassA.m//  IOS150624_ObjectiveC_@class关键字////  Created by PengJunlong on 15/6/24.//  Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import "ClassA.h"#import "ClassB.h"@implementation ClassA- (void)setClassB:(ClassB *)classb{    _classB = classb;}- (void)printClassBInClassA{    NSLog(@"name = %@",_classB.name);}@end

////  ClassB.h//  IOS150624_ObjectiveC_@class关键字////  Created by PengJunlong on 15/6/24.//  Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>#import "ClassA.h"    //会有循环链的存在,导致编译无法展开,(ClassA与ClassB相互引用),引用了当前类的类型以及类中的方法//@class ClassA;  //只引用这个类的类型,不引用这个类的方法@interface ClassB : NSObject{    ClassA *_classA;}@property (copy,nonatomic)NSString *name;- (void)setClassA:(ClassA *)classa;- (void)printClassAInClassB;@end

////  ClassB.m//  IOS150624_ObjectiveC_@class关键字////  Created by PengJunlong on 15/6/24.//  Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import "ClassB.h"@implementation ClassB- (void)setClassA:(ClassA *)classa{    _classA = classa;}- (void)printClassAInClassB{    NSLog(@"name = %@",_classA.name);}@end

////  main.m//  IOS150624_ObjectiveC_@class关键字////  Created by PengJunlong on 15/6/24.//  Copyright (c) 2015年 Peng Junlong. All rights reserved.//#import <Foundation/Foundation.h>#import "ClassA.h"#import "ClassB.h"//#import关键字,引用类的类型及类中定义的方法,若#import包含在头文件中可能会导致循环包含,需要用@class关键字来打断循环链//@class关键字,只引用类的类型,不引用类中的方法.但是如果想使用类中的方法,需要在对应的.m文件中用#import包含//@class只是告诉编译器存在这个类型,#import知道类内部信息全部int main(int argc, const char * argv[]) {    @autoreleasepool {        ClassA *classa = [[ClassA alloc] init];        classa.name = @"类A";        ClassB *classb = [[ClassB alloc] init];        classb.name = @"类B";        [classb setClassA:classa];        [classa setClassB:classb];        [classb printClassAInClassB];        [classa printClassBInClassA];    }    return 0;}


0 0