Objective-C基础语法规则

作者: Felix_Smile | 来源:发表于2016-09-18 13:23 被阅读237次

    Objective-C基础语法规则教程


    简介

    Objective-C是一种简单的面向对象的计算机语言。Oobjective-C扩展了标准的ANSI C语言。类的语法和设计主要是基于Smalltalk,最早的面向对象编程语言之一。

    Objective-C: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 MyClass:NSObject {
        //定义成员变量
        int count;
        id data;
        NSString* name;
    }
    //方法的声明
    -(id)initWithString:(NSString*)aName;
    +(MyCalss*)createMyClassWithString(NSString*)aName;
    @end
    

    上面的程序定义了一个名为MyClass并继承自NSObject的类。在OC的语言规则中,类的声明总是以@interface开始到@end结束。

    方法

    Objective-C中的类可以声明两种类型的方法:实例方法和类方法。实例方法就是一个方法,它在类的一个具体实例的范围内执行。也就是说,在你调用一个实例方法前,你必须首先创建类的一个实例。而类方法,比较起来,不需要你创建一个实例。

    -(void) insertObject:(id)anObject atIndex:(NSUInteger)index
    

    -:方法类型标识符,方法的声明必须以方法标识符开始;
    void:返回值的类型;
    insertObject:与anIndex一样为方法标识关键字;
    id:与NSUInteger为参数类型;
    anObject:与index同为参数名。

    属性

    属性是用来代替声明存取方法的便捷方式。他们仅仅是定义方法访问已有的实例变量的速记方式而已。属性声明应该放在类接口的方法声明那里。基本的定义使用@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     //结束声明
    

    注意:当方法的标识符为+是表示静态函数,-则为一般函数。

    类实现

    类的实现使用@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语法格式有:

    1. 双引号的前面的@表示这双引号中的字符串应该作为cocoa的NSString元素;
    2. %@表示输出为NSString数据类型,%d为整型;
    3. NSlog()和printf()类似,从控制台输出信息;
    4. 代码的最后依然需要以@end结尾;
    5. 如果我们需要访问fillColor成员变量可以使用Self.fillColor方法。

    对象初始化

    两种创建新对象的方法:

    • [类名 new]
    • [[类名 alloc] init]

    这两种方法是等价的,但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中的中括号:
    • 用于通知某个对象该做什么;
    • 方括号内第一项是对象,其余部分是你需要对象执行的操作;
    • 在objective-c中通知对象执行某种操作,称为发送消息。(也叫调用方法)。
      另外, Objective—C代码语句必须分号;结束,这与C的语法是相同的。 在Objective-C语法中,@interface和@implementation都是需要以@end结束。

    相关文章

      网友评论

      本文标题:Objective-C基础语法规则

      本文链接:https://www.haomeiwen.com/subject/xazwettx.html