一、类的定义形式:
每当创建一个类的时候会出现2个扩展名文件,分别是.h和.m文件。
.h文件是类的声明文件(也叫接口文件),.m是类的实现文件,基本格式如下:
.h接口文件Test.h:
#import <Foundation/Foundation.h>
@interface Test : NSObject //这是一个父类继承自NSObject的类
@end
.m实现文件Test.m:
#import "Static.h"
@implementation Test
@end
二、定义实例属性和实例方法:
.h接口文件Test.h:
#import <Foundation/Foundation.h>
@interface Test : NSObject
{
//声明实例变量
int number;
}
//声明实例方法
- (int)number;
- (void)setNumber: (int) n;
- (void)print;
@end
.m实现文件Test.m:
#import "Static.h"
@implementation Test
//方法实现
- (int)number
{
return number;
}
- (void)setNumber:(int)n
{
number = n;
}
- (void)print
{
NSLog(@"%i",number);
}
@end
类的属性的采用了getter和setter的方式读取,体现了类的封装性。
在实现类的头部导入了接口文件#import "Static.h"的原因:我们将接口和实现部分分成两个文件,编译器会单独编译每个文件,当编译实现文件的时候,需要知道接口部分的信息。
合成存取的方法:
从OC2.0开始,可以自动生成设值方法和取值方法,通过使用@property和@synthesize指令。可以将上面的类像如下定义:
.h接口文件Test.h:
#import <Foundation/Foundation.h>
@interface Test : NSObject
@property int number;
//声明实例方法
- (void)print;
@end
.m实现文件Test.m:
#import "Static.h"
@implementation Test
@synthesize number;
- (void)print
{
NSLog(@"%i",number);
}
@end
通过@property和@synthesize指令就代替了number、setnumber的取值方法,是由编译程序自动帮你完成。
三、通过点语法访问类属性
当你实例化一个类的之后可以使用简洁的点语法来访问类的属性,如下语句:
可以在mian.m文件里测试
#import <Foundation/Foundation.h>
#import "Test.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
Test *test = [[Test alloc] init] ;
test.number = 10; //等价于 [test setNumber :10] 这是OC里调用实例方法的格式,也叫实例接受消息 ,传递一个参数10
int i = test.number; //等价于int i = [test number]
}
return 0;
}