zoukankan      html  css  js  c++  java
  • Objective-C的面向对象特性(一)

            Objective-C在c语言的基础上增加了面向对象特性,都有哪些面向对象特性呢?

            其中第一个最重要的特性是类和对象的实现。

            Objective-C软件由许多对象构成,形成一个对象网络,对象之间通过发送消息交互。在Objective-C中一个对象通过调用另外对象对外公开的方法向其发送消息。每个对象在类的接口文件中声明自己的对外公共属性和行为。其它对象通过这些公共行为与该对象交互,如存取对象属性,或发送消息(调用其方法)来与对象交互。

           1)、类的定义

           类是对象的蓝图,类被用来描述任何一种类型对象的公共行为和属性。在Objective-C中,类的公共接口与类的实现分离,使用类接口规定 一个给定类型的对象打算如何被其它对象使用,即定义类实例和外部世界的公共接口,包括公共行为和属性。类接口和实现通常放在分离的文件中,以便用户仅需要知道公共接口就可以与该类的实例交互,类的接口放到以h为后缀的头文件中。

           在Objective-C中,类支持单类继承,所有类之间构成了一个树状类继承图,最上面的根类为NSObject,任何类都直接或间接派生自NSObject。NSObject定义了其它类可以继承的大量特性,提供类的基本功能和类之间交互的基本行为。

            定义类接口的语法为如下形式:

    @interface SimpleClass : NSObject


     @property NSString *firstName;

    - (void)sayHello;

     -(void)someMethodWithFirstValue:(SomeType)value1 secondValue:(AnotherType)value2;


    @end


           上面定义了一个名字为SimpleClass派生自NSObject的类。

            类的公共属性和行为(方法)定义在@interface 声明内。

           类的属性以@property关键字声明,指针类型的声明表明该属性为一个对象。

           类的行为(方法)概念上与其它语言的标准函数类似,但在语法上相当不同。

           Objective-C中类的行为(方法)声明比较特殊,前面以符号’-’或’+’开头,’-’开头指示的方法是一个实例方法,能被任何类的实例调用。’+’开头声明的方法指示是一个类方法,通常作为类的工厂方法使用。方法声明中如果包括多个参数,方法声明就包括以空格分开的 多个部分,有几个参数,就包括几个部分,每个参数一个部分,每个部分又以’:’分开,冒号前面的为方法名,冒号后面的为参数声明。方法的返回类型规定在第一部分方法名前面的圆括号中,可以为任意类型。

            2)、类的实现

          类的实现放到以m为后缀的文件中。类实现文件的基本语法类似如下:

    #import "XYZPerson.h"


    @implementation XYZPerson


     - (void)sayHello {


        NSLog(@"Hello, World!");


    }


    @end

           类的实现文件中需要通过#import关键字输入类的接口文件,不以分号结尾。方法实现与c 语言功能定义类似,使用大括号来包含相关代码,并且方法名字必须与方法原型一致,包括方法名、参数和方法返回的类型。作为约定,方法名字应该以小心字母开始,在包含多个字的情况下,对于另外的每一个字的首字母要用大写字母开头。

           3)、类本身也是对象

           在Objective-C中,一个类本身也是一个对象,类对象的类型为Class,Class类型没有属性,但能够接收消息。类方法的标准使用是作为工厂方法使用。类方法以’+’开头,用来指示一个类方法。

           4)、对象发送和接收消息

          发送消息的语法为:


           [someObject doSomething];


           使用方括号来指示一条消息的发送,在方括号中左边为消息的接收对象someObject,在方括号中右边为发送的消息,即调用的接收对象的方法。

           对象能够给自己发送消息,使用self指针,self指针引用当前接收对象。

           对象通过super关键字也能够调用它的超类实现的方法。发送消息到super即调用继承琏的上级超类的一个方法实现。

           5) 对象被动态创建

           在对象使用前需要为其分配内存和初始化。在Objective-C中,对象在堆中动态分配。

           NSObject根类提供一个类方法用来为对象分配内存,形式为:

    • (id)alloc;
    • alloc的返回类型为id,是在Objective-C的一个特定关键字,是一个指针类型,代表和指向一个任意类型的对象,概念上类似(NSObject *)。
    • alloc方法为对象分配内存,并设置对象的属性为0。
    • 对象的初始化方法是NSObject类定义的一个对象方法,形式为:
    • (id)init;

             init方法确保对象属性在创建时有合适的初值。

            如果一个方法返回一个对象指针,就可能实现方法的嵌套,前一个方法返回的对象作为接收对方调用其另外的方法,从而能够组合多个消息调用到一个句子中。

            如下面例子一个句子就实现了一个对象的分配和初始化。

              NSObject *newObject = [[NSObject alloc] init];


           类通常提供类工厂方法用来实现对象的分配和初始化。

            NSObject 类还提供了new方法用来实现对象的创建,效果上和调用alloc和 init相同。

           一些类还允许使用更加简介的形式来创建对象。

            如使用如下形式创建一个NSString。

           NSString *someString = @"Hello, World!”;

            其中@用来指示是一个对象。

            效果上和如下调用类工厂方法相同;

     NSString *someString = [NSString stringWithCString:"Hello, World!"                                  encoding:NSUTF8StringEncoding];


            Objective-C使用指针来指向和跟踪一个对象,由于Objective-C是一个动态语言,对象的类型在运行时确定,使用指针时不用太关心指针指向的类类型。在发送消息时相关对象的正确的方法被正确确定。

            id代表一个通用对象指针,可以用id 来声明一个对象。

           对象变量声明时自动被设置为nil,代表没有地址的意义,语法上相当于c语言的null。但在Objective-C 中发送一个消息到nil是有意义的,只是什么事情也不做。

                                            


  • 相关阅读:
    js四舍五入
    文本框只能输入整数,输入其他的自动不显示
    [转]关于C#程序部署到Android
    ajax在火狐中传中文出现乱码的解决方法
    Vue 记录 Cannot read property '_withTask' of undefined
    vs中 VMDebugger未能加载导致异常
    System.InvalidOperationException: 支持“XXX”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
    eclipse中将java项目转换成javaweb项目
    Android之SOAP协议与WebService服务器交互,解决超时的问题
    SymmetricDS 快速和灵活的数据库复制
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154496.html
Copyright © 2011-2022 走看看