@class主要是在h(头文件)中使用。主要的作用是告诉编译器:我要在本类中,使用另一个类。

假设要在Aonauly类中使用Action类,使用@class实现过程如下:


首先是定义Action

1,Action.h代码如下:

////Action.h//Ainy_Console////CreatedbyAppleon2017/9/9.//Copyright2017年Apple.Allrightsreserved.//#import<Foundation/Foundation.h>@interfaceAction:NSObject-(void)eat;//声明吃的方法@end

2,Action.m代码如下:

////Action.m//Ainy_Console////CreatedbyAppleon2017/9/9.//Copyright2017年Apple.Allrightsreserved.//#import"Action.h"@implementationAction/***实现吃的方法*/-(void)eat{NSLog(@"Iloveeatapple");}@end


好 , 我们在Aonaufly类中申明对Action的引用

1,aonaufly.h代码如下:

////Aonaufly.h//Ainy_Console////CreatedbyAppleon2017/9/7.//Copyright2017年Apple.Allrightsreserved.//#import<Foundation/Foundation.h>@classAction;@interfaceAonaufly:NSObject@propertyint_a,_b;-(int)sum_one:(int)csum_b:(int)d;//带参数名的方法-(int)sum:(int)i:(int)j;//不带参数名的方法-(Action*)action;//申明了自己定义的一个类Action-(void)setAction:(Action*)ac;@end

注意:

在H文件中必需要编译器知道Action到底是什么 , 那个@class就是干这个的。


2,Aonaufly.m代码如下:

////Aonaufly.m//Ainy_Console////CreatedbyAppleon2017/9/7.//Copyright2017年Apple.Allrightsreserved.//#import"Aonaufly.h"#import"Action.h"@implementationAonaufly{Action*action;}@synthesize_a,_b;-(int)sum_one:(int)csum_b:(int)d{return[selfsum:c:d];//调用本类的方法sum}-(int)sum:(int)i:(int)j{returni+j;}-(void)setAction:(Action*)ac{action=ac;}-(Action*)action{returnaction;}@end


关于调用

////main.m//Ainy_Console////CreatedbyAppleon2017/9/6.//Copyright2017年Apple.Allrightsreserved.//#import"Aonaufly.h"#import"Action.h"intmain(intargc,constchar*argv[]){@autoreleasepool{Aonaufly*myAonaufly;myAonaufly=[[Aonauflyalloc]init];intsum=[myAonauflysum_one:1sum_b:2];//调用方法(带参数)NSLog(@"thisis1+2SUM:%i",sum);//为属性_a,_b赋值myAonaufly._a=3;myAonaufly._b=5;//调用不带参数名的sum方法如下sum=[myAonauflysum:myAonaufly._a:myAonaufly._b];NSLog(@"this%i+%ivalueis:%i",myAonaufly._a,myAonaufly._b,sum);//对于@classAction*myAction;myAction=[[Actionalloc]init];[myAonauflysetAction:myAction];[myAonaufly.actioneat];//调用Aoanufly中Action的eat方法}return0;}

结果如下:

[myAonaufly.action eat] 注意是调用Aonaufly 中的Action的eat方法