一、语法简介
1.类
在OC中,一般用二个文件描述一个类,一个是.h文件,一个是.m文件爱你:
1>:.h文件是类的声明文件,用于声明变量和方法。类的声明使用关键字@interface和@end。
2>:.m文件是类的实现文件,用于实现.h类中声明的方法。类的实现使用关键字@implementation和@end。
2.方法
1> 方法的声明和实现,都必须以 + 或者 - 开头
- + 表示类方法(静态方法)
- - 表示对象方法(动态方法)
2> 在.h中声明的所有方法作用域都是public类型,不能更改
3.成员变量
成员变量的常用作用域有3种:
1> @public 全局都可以访问
2> @protected 只能在类内部和子类中访问
3> @private 只能在类内部访问
二、类的声明和实现
1.Student.h类的声明文件
1 #import <Foundation/Foundation.h> 2 3 @interface Student : NSObject { 4 5 int age; 6 @public 7 int no; 8 int score; 9 10 @protected 11 float height; 12 13 @private 14 float weight; 15 } 16 - (int)age; 17 - (void)setAge:(int)newAge; 18 - (void)setAge:(int)newAge :(float)newHeight; 19 @end
1>第3行:用@interface声明一个类Student,后面紧跟着的:表示继承与NSObject
2>第5行:定义了一个int类型的成员变量age,age的默认作用域是@protected,即可以在Student类内部和子类中访问
3>第16行:声明了age的get方法,方法名就叫做age,OC建议get方法的名字跟成员变量保持一致。- 表示这是一个动态方法( + 则表示静态方法),动态方法属于对象,静态方法属于类。
4>地18行:方法的方法名是setAge:andHeight:
2.Student.m的实现文件
1 #import "Student.h" 2 3 @implementation Student 4 5 - (int)age { 6 NSLog(@"age..."); 7 return age; 8 } 9 10 - (void) setAge:(int)newAge { 11 NSLog(@"setage..."); 12 age = newAge; 13 } 14 15 - (void) setAge:(int)newAge :(float)newHeight { 16 age = newAge; 17 height = newHeight; 18 } 19 20 @end
第5行和第10行和15行实现了Student.h中声明的方法
三、对象的创建
1 #import <Foundation/Foundation.h> 2 #import "Student.h" 3 int main(int argc, const char * argv[]) 4 { 5 6 @autoreleasepool { 7 8 // insert code here... 9 Student *stu = [[Student alloc]init]; 10 stu.age = 15; 11 NSLog(@"......"); 12 13 int age1 = stu.age; 14 NSLog(@"......"); 15 16 stu->no = 120; 17 [stu setAge:100]; 18 int age = [stu age]; 19 20 NSLog(@"student no=%i,age is=%i,age1=%i",stu->no,age,age1); 21 NSLog(@"Hello, World!"); 22 [stu release]; 23 } 24 return 0; 25 }
1>第9行:创建一个Student类对象,分配空间并初始化
2>第10行获取和设置age的值,等价于调用[stu setAge:15]和int age = [stu age]。点语法的本质是函数调用
2>第16行:公共成员变量no,如果不是公共变量,不能像这样直接访问。注意访问方式:对象->成员变量
四、总结
1、- 表示对象方法(动态方法),+ 表示类方法(静态方法)
2、.语法的本质是get或者set函数调用