A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ZXY66452 中级黑马   /  2015-12-9 21:03  /  955 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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;

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马