Objective-C是一种简单的面向对象的计算机语言。Oobjective-C扩展了标准的ANSI C语言。类的语法和设计主要是基于Smalltalk,最先的面向对象编程语言之一。objective-c
Objective-C是ANSI版本C编程语言的超集,支持C的基本语法。在C代码中,你定义头文件和源代码文件,从代码实现细节分离公共声明。Objective-C头文件使用的文件名有: 编程
扩展名 | 内容类型 |
---|---|
.h | 头文件。包含类、类型、函数和常量的声明 |
.m | 源代码文件。源代码的扩展名,能够包含Objective-C和C代码 |
.mm | 源代码文件。带有这种扩展名的源代码文件,除了能够包含Objective-C和C代码之外还能够包含C++代码。仅在你的Objective-C代码中确实须要使用C++类或者特性的时候才用这种扩展名。 |
如同全部其余的面向对象语言,类是Objective-C用来封装数据,以及操做数据的行为的基础结构。对象就是类的运行期间实例,它包含了类声明的实例变量本身的内存拷贝,以及类成员的指针。Objective-C的类规格说明包含了两个部分:接口和实现。接口部分包含了类声明和实例变量的定义,以及类相关的方法。实现部分包含了类方法的实际代码。编程语言
[@interface](https://my.oschina.net/u/996807) MyClass:NSObject { //定义成员变量 int count; id data; NSString* name; } //方法的声明 -(id)initWithString:(NSString*)aName; +(MyCalss*)createMyClassWithString(NSString*)aName; [@end](https://my.oschina.net/u/567204)
上面的程序定义了一个名为MyClass并继承自NSObject的类。在OC的语言规则中,类的声明老是以**@interface开始到@end**结束。函数
Objective-C中的类能够声明两种类型的方法:实例方法和类方法。实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方法前,你必须首先建立类的一个实例。而类方法,比较起来,不须要你建立一个实例。atom
-(void) insertObject:(id)anObject atIndex:(NSUInteger)index
-:方法类型标识符,方法的声明必须以方法标识符开始; void:返回值的类型; insertObject:与anIndex同样为方法标识关键字; id:与NSUInteger为参数类型; anObject:与index同为参数名。.net
属性是用来代替声明存取方法的便捷方式。他们仅仅是定义方法访问已有的实例变量的速记方式而已。属性声明应该放在类接口的方法声明那里。基本的定义使用@property编译选项,紧跟着类型信息和属性的名字。设计
@property BOOL flag; @property (copy) NSString* nameObject;//在赋值过程当中复制对象 @property (readOnly) UIVIew* rootView;//建立一个getter方法
使用属性的好处就是可使用点语法访问它们。属性还有copy, retain, readwrite, readonly等属性。换而言之,Objective-C中引入的属性,以确保类的实例变量能够在类的外部访问。指针
myObject.flag=YES;//myObject为类方法名 CGRect myViewFrame=myObject.rootView.Frame;
@interface Circle:NSObject //为Circle类定义接口;NSObject表示是父类。 { //成员变量 ShapeColor fillColor; ShapeRect bounds; } //如下是方法声明 -(void) setFillColor: (ShapeColor) fillColor; //冒号前面的依次是方法标识符、返回值类型和方法名;冒号后面的内容依次为参数类型和参数名。 -(void) setBounds:(ShapeRect) bounds; -(void) draw; @end //结束声明
注意:当方法的标识符为+是表示静态函数,-则为通常函数。code
类的实现使用**@implementation**声明。对象
@implementation Circle -(void) setFillColor: (ShapeColor) c { fillColor=c; } -(void) draw { NSLog(@”drawing a circle at(%d %d %d %d) in %@”, bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillName)); } @end
上面的实例中,咱们一次实现了类Circle的setFillColor和draw方法。另外咱们须要注意到的OC语法格式有:
两种建立新对象的方法:
这两种方法是等价的,但cocoa的惯例是使用后者。alloc在为对象分配空间的同时,将这块内存初始化为0;
//建立新对象,使用缺省初始化函数 Bank *bankDefault = [[Bank alloc] init]; //调用方法: [bank addAmount: 1]; [bank print]; // 释放对象: [bankDefault free];
//引入头文件 #import <Foundation/Foundation.h> //定义继承自NSObject的Box类 @interface Box:NSObject { double length; double breadth; double height; } @property(nonatomic, readwrite) double height; // 属性 -(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( ) { Box *box1 = [[Box alloc]init]; Box *box2 = [[Box alloc]init]; //建立Box类对象并初始化 double volume = 0.0; // 对类的属性赋值 box1.height = 5.0; box2.height = 10.0; //box1 volume = [box1 volume]; NSLog(@"Volume of Box1 : %f", volume); // box2 volume = [box2 volume]; NSLog(@"Volume of Box2 : %f", volume); return 0; }
运行结果以下:
2016-09-18 12:26:45.364523 OC[2035:85558] Volume of Box1 : 5.000000 2016-09-18 12:26:45.366837 OC[2035:85558] Volume of Box2 : 10.000000
经过上面的实例咱们须要知道的是: Objective-C中的中括号