zoukankan      html  css  js  c++  java
  • iOS开发笔记系列-基础2(类)

    面向对象编程总是离不开类和对象的,Objective-C也不例外,不过Objective-C中的类还有一些自己的独特点。

    类的声明和定义

    在iOS开发中,类的声明与定义通常都是分开的,类得声明通常存放在.h文件中,比如someclass.h文件,声明的内容要放在@interface和@end指令之间,这是接口部分,声明中主要是给出类的属性的名称和类型及方法的名称、参数和返回类型;而类的定义则通常放在同名的.m文件中,如someclass.m,定义的内容要放在@implementation和@end指令之间,这是实现部分,在类的定义文件中,需要在最开始导入声明文件,如#import "someclass.h",在定义文件中,主要是类的实现,比如方法的具体实现,实现存取器等。类的接口部分和实现部分都可以定义变量,区别是接口部分定义的变量是共有变量,子类可以直接访问,实现部分定义的变量是私有变量,子类不能直接访问,需要明确定义和合成取值方法,才能访问实例变量的值。
    当然,这种文件分开的形式是推荐而不是必须的,在一个文件中,可以将类的声明放在@interface和@end指令之间,然后将其定义放在@implementation和@end指令之间就可以了。
    在类的声明和定义中,通常需要导入一些系统文件,如基础的类库等,这时用#import <>就可以,比如#import <Foundation/Foundation.h>,这里区别于#import "",双引号是用于导入本地文件(开发者自己创建的文件),<>则用于引入系统文件。使用双引号时,编译器一般会首先在项目目录寻找指定文件,然后转到其他位置查找。
    类的声明中,通常使用@property指令标识属性,然后在实现部分使用@synthesize指令,就可以让编译器自动生成存取方法。如@property int somep;@ synthesize somep; 编译器就会自动生成两个方法:
    -(int)somep;
    -(void)setSomep:(int)somep;

    static关键字

    在变量声明之前加上static关键字,可以使局部变量保留多次调用一个方法所得的值,它只会在程序开始执行的时候初始化一次,在以后的多次调用中保存这些数值而不会重新初始化。它还具备以下特点:
    (1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次, 因此其值在下次调用时仍维持上次的值;
    (2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
    (3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
    (4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
    (5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。

    类的方法的参数名是局部变量。执行方法时,通过方法传递的任何参数都被复制到局部变量中。因为方法使用参数的副本,所以不能改变通过方法传递的原值。

    self关键字

    self关键字是用来指明对象是当前方法的接收者。比如[self somefunc],就是在当前对象上调用了一个方法。

    继承

    当一个类继承自另一个类时,都会继承一些属性,比如父类的非私有实例变量和方法都会成为子类定义的一部分,子类可以直接访问这些方法和实例变量。子类中的同名方法会覆盖掉父类的同名方法,在子类的对象上调用该方法将会用子类的方法实现。类的继承方便了对其进行扩展,也可以通过分类机制(category)以模块的方式向现有类定义添加新方法,也就是说,不必经常给同一接口和实现文件增加新定义。当对没有源代码访问权限的类添加新定义时,特别方便。
    在接口部分声明的实例变量才能被子类直接访问到,如
    @interface someclass:NSObject
    {
    int x;
    }

    抽象类

    有时,创建类只是为了更容易创建子类。因此,这些类名为抽象类或者抽象超类。在该类中定义方法和实例变量,但不期望任何人从该类创建实例。比如Foundation框架里的NSNumber类,它是为了将数字作为对象处理而创建的抽象类。整数与浮点数通常有不同得内存需求。每种数字类型都有单独的NSNumber子类,这些子类与它们的抽象超类不同,这些子类是具体存在的,它们名为具体子类。每个具体子类属于NSNumber类,总起来名为簇(cluster)。向NSNumber类发送消息来创建新的整数对象时,使用合适得子类为整数对象分配必要的空间,并正确地设定其值。这些子类实际上是私有的。你自己无法直接访问这些子类,只能通过抽象的超类间接访问。抽象超类提供了处理所有的数字对象类型的公共接口,你无须了解存储在数字对象中的数字类型及如何设置与检索该值。

  • 相关阅读:
    android 75 新闻列表页面
    android 74 下载文本
    android 73 下载图片
    android 72 确定取消对话框,单选对话框,多选对话框
    android 71 ArrayAdapter和SimpleAdapter
    android 70 使用ListView把数据显示至屏幕
    maven如何将本地jar安装到本地仓库
    Centos6.7搭建ISCSI存储服务器
    解决maven打包编译出现File encoding has not been set问题
    MySQL 解决 emoji表情 的方法,使用utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
  • 原文地址:https://www.cnblogs.com/dson/p/4512789.html
Copyright © 2011-2022 走看看