发布于 2015-07-05 11:47:31 | 215 次阅读 | 评论: 0 | 来源: 网络整理
Objective-C编程语言的主要目的是增加面向对象的 C++编程语言,类是核心支持面向对象编程及 Objective-C 的特点,通常被称为用户定义的类型。
类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据转换成一个整齐的包。在一个类的数据和方法,被称为类的成员。
类定义在两个不同的部分,即 @interface 和 @implementation.
几乎所有东西都以对象的形式。
对象接收消息和对象通常被称为接收器。
对象包含实例变量。
对象和实例变量的范围。
类隐藏对象的实现。
属性是用来提供访问其他类的类的实例变量。
当定义一个类,定义的数据类型的结构。 这实际上并不定义任何数据,但它定义的类的名字的意思是什么,即是什么类的对象将包括这样一个对象上执行什么操作可以。
类 定义开始用关键字 @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
实例变量是私有的,只能访问内部类实现。
一个类提供对象的图纸,所以基本上是一个从一个类对象被创建。我们声明一个类的对象的排序完全相同的声明,我们基本类型的变量声明。下面的语句声明了两个对象,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中引入的属性,以确保类的实例变量可以在类的外部访问。
各部分属性声明如下。
这是唯一可能的属性,我们可以访问类的实例变量。其实内部的属性创建getter和setter方法。
例如,让我们假设我们有一个属性@property (nonatomic ,readonly ) BOOL isDone。有如下图所示,创建 getter 和 setter 方法。
-(void)setIsDone(BOOL)isDone;
-(BOOL)isDone;