面向对象编程总是离不开类和对象的,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类发送消息来创建新的整数对象时,使用合适得子类为整数对象分配必要的空间,并正确地设定其值。这些子类实际上是私有的。你自己无法直接访问这些子类,只能通过抽象的超类间接访问。抽象超类提供了处理所有的数字对象类型的公共接口,你无须了解存储在数字对象中的数字类型及如何设置与检索该值。

iOS开发笔记系列-基础2(类)的更多相关文章

  1. iOS开发笔记系列-基础1(数据类型与表达式)

    学习iOS开发快两年了,去年完成MagViewer之后就因为公司的其他业务繁重,除了维护这个应用之外,只是断断续续地自己做一些实验开发,没有再发布新的应用,这里想整理一下学习过程中的笔记,以便加深印象 ...

  2. iOS开发笔记系列-基础5(分类和协议)

    分类 在Objective-C中,除了通过新建子类的方式来向类添加新方法外,还可以通过分类的方式.分类提供了一种简单的方式,将类的定义模块化到相关方法的组或分类中,它还提供了扩展现有类定义的简便方式, ...

  3. iOS开发笔记系列-基础3(多态、动态类型和动态绑定)

    多态:相同的名称,不同的类 使不同的类共享相同方法名称的能力成为多态.它让你可以开发一组类,这组类中的每一个类都能响应相同的方法名.每个类的定义都封装了响应特定方法所需要的代码,这使得它独立于其他的类 ...

  4. iOS开发笔记系列-基础6(预处理程序)

    预处理程序提供了一些工具,使用这些工具更易于开发.阅读.修改程序,也易于将程序移植到不同的系统中.又称为宏. #define #define语句的基本用途之一就是给富豪名称指定程序常量.比如: #de ...

  5. iOS开发笔记系列-基础4(变量与数据类型)

    对象的初始化 对象的初始化方法一般都如下: -(id)init { self=[super init]; if(self){ ... } return self; } 这个方法首先会调用父类的初始化方 ...

  6. iOS开发笔记系列-基础7(C语言特性)

    Objective-C是C语言的扩展,因此,也具备很多C语言的基本特性,这里只罗列部分. 块(Blocks) 块是对C语言的一种扩展,它并未作为标准ANSI C所定义的部分,而是Apple添加到语言中 ...

  7. IOS科研IOS开发笔记学习基础知识

    这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollVi ...

  8. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  9. iOS开发技巧系列---详解KVC(我告诉你KVC的一切)

    KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...

随机推荐

  1. Hadoop课程介绍

    一.课程简介 1. Hadoop是什么? Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架.它支持在商品硬件构建的大型集群上运行的应用程序.H ...

  2. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  3. ASP.NET MVC 基础

    ASP.NET MVC oo1 Mvc准备工作课程安排:ORM->AspNet MVC开发环境:VS2012/VS2013SqlServer2008/2005主讲Asp.Net Mvc4 Raz ...

  4. vs2010调用matlab2011下的.m文件

    很幸运在网上找到了采用引擎的方法,用vs2009调用matlab2008下的.m文件:但个人的环境是vs2010+matlab2011;想着二者差不多,故将s2010调用matlab2008拿来试试: ...

  5. Mobile testing基础之Native、Web、Hybrid、activity、webview

    应用一词指的是app,即application.原生应用指的是能直接运行于当前操作系统的应用程序:web应用指需要在浏览器中运行的网页应用,由于界面体验.功能上都更加强大,可媲美原生应用,故称web应 ...

  6. Python脚本控制的WebDriver 常用操作 <二十二> 处理alert / confirm / prompt

    测试用例场景 webdriver中处理原生的js alert confirm 以及prompt是很简单的.具体思路是使用switch_to.alert()方法定位到alert/confirm/prom ...

  7. jquery 单行滚动、批量多行滚动、文字图片翻屏滚动效果代码

    jquery单行滚动.批量多行滚动.文字图片翻屏滚动效果代码,需要的朋友可以参考下. 以下代码,运行后,需要刷新下,才能加载jquery,要不然看不到效果.一.单行滚动效果 <!DOCTYPE ...

  8. java 注解(转)

    第一部分:了解一下java1.5起默认的三个annotation类型:    一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的.    一个是@Deprecated:建 ...

  9. VirtualBox故障一例

    早上的测试环境,估计是任务太重了吧,在点击VirtualBox的快速休眠后,就没有响应了,查看日志,内容都是: aComponent={Console} aText={The virtual mach ...

  10. 用COM方式快速导出到Excel一例,批量导出

    开发中用到填充Excel时,一个一个的填充不免太慢,现有用数组方式填充一例,可以实现COM方式快速填充. C#,VBA中用法类似 适用场景:需要自动化操作Excel的方式下使用,比较除填充数据外还要自 ...