Objective-C 类&对象
Objective-C编程语言的主要目的是增加面向对象的 C++编程语言,类是核心支持面向对象编程及 Objective-C 的特点,通常被称为用户定义的类型。
类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据转换成一个整齐的包。在一个类的数据和方法,被称为类的成员。
Objective-C的特点
-
类定义在两个不同的部分,即 @interface 和 @implementation.
-
几乎所有东西都以对象的形式。
-
对象接收消息和对象通常被称为接收器。
-
对象包含实例变量。
-
对象和实例变量的范围。
-
类隐藏对象的实现。
-
属性是用来提供访问其他类的类的实例变量。
Objective-C的类定义:
当定义一个类,定义的数据类型的结构。 这实际上并不定义任何数据,但它定义的类的名字的意思是什么,即是什么类的对象将包括这样一个对象上执行什么操作可以。
类定义开始用关键字 @interface 接口(类)的名称和类主体,由一对花括号括起来。 Objective-C中所有的类都派生自基类NSObject。它是所有的Objective-C类的超类。它提供了基本的方法,如内存分配和初始化。例如,我们定义框数据类型使用关键字 class 如下:
@interface Box:NSObject { //Instance variables double length; // Length of a box double breadth; // Breadth of a box } @property(nonatomic, readwrite) double height; // Property @end
实例变量是私有的,只能访问内部类实现。
Objective-C 对象分配和初始化:
一个类提供对象的图纸,所以基本上是一个从一个类对象被创建。我们声明一个类的对象的排序完全相同的声明,我们基本类型的变量声明。下面的语句声明了两个对象,Box类:
Box box1 = [[Box alloc]init]; // Create box1 object of type Box Box box2 = [[Box alloc]init]; // Create box2 object of type Box
两个对象box1和box2 都会有自己的数据成员的副本。
访问的数据成员:
一个类的对象的属性可以直接使用成员访问运算符(.)访问。让我们来尝试下面的例子:
#import <Foundation/Foundation.h> @interface Box:NSObject { double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box } @property(nonatomic, readwrite) double height; // Property -(double) volume; @end @implementation Box @synthesize height; -(id)init { self = [super init]; length = 1.0; breadth = 1.0; return self; } -(double) volume { return length*breadth*height; } @end int main( ) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; Box *box1 = [[Box alloc]init]; // Create box1 object of type Box Box *box2 = [[Box alloc]init]; // Create box2 object of type Box double volume = 0.0; // Store the volume of a box here // box 1 specification box1.height = 5.0; // box 2 specification box2.height = 10.0; // volume of box 1 volume = [box1 volume]; NSLog(@"Volume of Box1 : %f", volume); // volume of box 2 volume = [box2 volume]; NSLog(@"Volume of Box2 : %f", volume); [pool drain]; return 0; }
让我们编译和运行上面的程序,这将产生以下结果:
2013-09-22 21:25:33.314 ClassAndObjects[387:303] Volume of Box1 : 5.000000 2013-09-22 21:25:33.316 ClassAndObjects[387:303] Volume of Box2 : 10.000000
属性:
Objective-C中引入的属性,以确保类的实例变量可以在类的外部访问。
各部分属性声明如下。- 属性由@property开始,这是一个关键字
- 其次是访问指示符,非原子或原子,读写或只读强,unsafe_unretained 或弱。变化根据不同的变量。对于任何类型的指针,我们可以使用强大或unsafe_unretained。同样,对于其他类型,我们可以使用读写或只读。
- 其次是数据类型的变量。
- 最后,我们必须以分号结束的属性名称。
- 我们可以在实现类中添加合成语句。但在最新的Xcode,合成部分XCode在生成,需要不包括合成语句。
这是唯一可能的属性,我们可以访问类的实例变量。其实内部的属性创建getter和setter方法。
例如,让我们假设我们有一个属性@property (nonatomic ,readonly ) BOOL isDone。有如下图所示,创建 getter 和 setter 方法。
-(void)setIsDone(BOOL)isDone; -(BOOL)isDone;