转载、引用请注明来源!
Objective-C的类
一、语法简介
1、类
1)、.h文件:类的声明文件,用于声明实例变量和方法。类的声明使用关键字@interface和@end。【.h中的方法只是声明,不实现,也就是只说明了方法名、返回类型、接收的参数及类型,并不会编写方法的内部代码】!
2)、.m文件:类的实现文件,用于实现.h中声明的方法。类的实现文件使用关键字@implementation和@end。
2、实例变量
实例变量的声明和C语言定义变量的方法是一样的,使用“变量类型 变量名”格式的语法。【id 类型变量表示任意对象类型】
3、实例变量的作用域:
1)、@public (公开的)在有对象的前提下,任何地方都可以直接访问。
2)、@protected (受保护的,默认就是@protected)只能在当前类和子类的对象方法中访问。
3)、@private (私有的)只能在 当前类的对象和对象方法中才能直接访问。
4、方法
1)、方法的声明和实现,都必须以 + 会 - 号开头
+ 表示类方法
- 表示对象方法
2)、在 .h 中声明的所有方法作用域都是 public 。
二、创建 OC 类
1、右击项目文件,选择 New File
2、选择Cocoa的 Cocoa Class
3、输入类名(首字母通常大写)和选择父类、语言
这样就创建了一个类名为People的类,父类是NSObject。
4、创建完成后,项目多了 2 个文件
* People.h 是类的声明文件, People.m 是类的实现文件。
* 默认情况下, 这两个文件名与类名一致
* 编译器只会编译 .m 文件,不会编译 .h 文件。
三、类代码解析
1、People.h — 类的声明文件
#import
@interface People : NSObject
@end
1)、 OC 中使用 @interface 来声明一个类,@interface 后面紧跟类名 People 。
2)、 类名 People 后面的冒号 : 表示继承,People : NSObject 表示 People 类继承自 NSObject 。
3)、@end 表示类声明的结束。
4)、 #import , 是因为 NSObject 被声明在 Foundation.h 中。
2、People.m — 类的实现文件
#import "People.h"
@implementation People
@end
1)、因为 People 这个类声明在 People.h 文件中 ,所以要 #import "People.h" 。
2)、OC中使用关键字 @implementation 来实现一个类,@implementation 后的 People 表示要实现的类。
3)、 @end表示类的实现结束 。
四、添加成员变量
通常情况下,我们把实例变量定义在类的头文件中,即类的声明文件中。
1、给 People 添加实例变量
#import
@interface People : NSObject
{
int _age; //年龄
float _weight; //体重
}
@end
1)、添加了一个 int 类型的成员变量 _age 和 float 类型的成员变量 _weight,默认情况下成员变量的作用域是@protected [受保护的],即可以在 People 类内部和子类访问。
2)、实例变量必须写在花括号 { } 中。
五、添加方法
前面定义了两个实例变量 _age 和 _weight ,它们的作用域是 @protected ,外界不能直接访问它们。为保证数据的封装性,我们可以提供 _age 和 _weight 的 get 和 set 方法,让外界间接访问 _age 和 _weight 。下面以 _age 的 get 和 set 方法为例。
1、在 People.h 中声明方法
#import
@interface People : NSObject
{
int _age; //年龄
float _weight; //体重
}
- (void)setAge:(int) age; //age 的 set 方法声明
- (int)age; //age 的 set 方法声明
@end
1)、- (void)setAge:(int) age; 是 set 方法的声明,- 表示类方法,(void)表示返回类型,setAge:是方法名,【注意冒号也是方法名的一部分,一个冒号对应一个参数】,(int) 是参数类型,age 是参数名。
2)、- (int)age; 是 get 方法的声明,该方法没有参数。
2、在 People.m 中实现方法
#import "People.h"
@implementation People
//set方法的实现
- (void)setAge:(int) age{
_age = age;
}
//get方法的实现
- (int)age{
return _age;
}
@end
1)、set 方法将参数 age 赋值给实例变量 _age。
2)、 get 方法 返回实例变量age。
六、创建对象
在使用一个对象之前,首先要调用类的构造函数生成对象。OC通过向类发送消息来创建一个对象,发送alloc消息即可创建对象: 语法:[类名 alloc];
alloc 执行后即可完成对象所需的内存分配,但还没进行初始化。初始化对象的方法叫初始化方法。
语法:[[类名 alloc] init]; *OC中的方法可以嵌条使用。
这样就可以生成一个对象了。(也可以使用 new 直接生成一个对象)
*创建一个 People 对象
#import
#import "People.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
People *p1 = [[People alloc] init];
}
return 0;
}
1)、因为要使用People 类,所以要包含 #import "People.h" 。
2)、OC中的方法调用使用 [ ] ,括号左侧是调用者(类 或 对象),右侧是方法。
3)、分配内存。+(id)alloc; 方法是类方法,其返回值是 id 类型。
4)、初始化。init方法是对象方法。
*销毁对象:在还没有ARC(自动释放)机制的年代,每创建一个对象,就要手动释放一次
即:[p1 release];