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;
|
|