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类发送消息来创建新的整数对象时,使用合适得子类为整数对象分配必要的空间,并正确地设定其值。这些子类实际上是私有的。你自己无法直接访问这些子类,只能通过抽象的超类间接访问。抽象超类提供了处理所有的数字对象类型的公共接口,你无须了解存储在数字对象中的数字类型及如何设置与检索该值。
iOS开发笔记系列-基础2(类)的更多相关文章
- iOS开发笔记系列-基础1(数据类型与表达式)
学习iOS开发快两年了,去年完成MagViewer之后就因为公司的其他业务繁重,除了维护这个应用之外,只是断断续续地自己做一些实验开发,没有再发布新的应用,这里想整理一下学习过程中的笔记,以便加深印象 ...
- iOS开发笔记系列-基础5(分类和协议)
分类 在Objective-C中,除了通过新建子类的方式来向类添加新方法外,还可以通过分类的方式.分类提供了一种简单的方式,将类的定义模块化到相关方法的组或分类中,它还提供了扩展现有类定义的简便方式, ...
- iOS开发笔记系列-基础3(多态、动态类型和动态绑定)
多态:相同的名称,不同的类 使不同的类共享相同方法名称的能力成为多态.它让你可以开发一组类,这组类中的每一个类都能响应相同的方法名.每个类的定义都封装了响应特定方法所需要的代码,这使得它独立于其他的类 ...
- iOS开发笔记系列-基础6(预处理程序)
预处理程序提供了一些工具,使用这些工具更易于开发.阅读.修改程序,也易于将程序移植到不同的系统中.又称为宏. #define #define语句的基本用途之一就是给富豪名称指定程序常量.比如: #de ...
- iOS开发笔记系列-基础4(变量与数据类型)
对象的初始化 对象的初始化方法一般都如下: -(id)init { self=[super init]; if(self){ ... } return self; } 这个方法首先会调用父类的初始化方 ...
- iOS开发笔记系列-基础7(C语言特性)
Objective-C是C语言的扩展,因此,也具备很多C语言的基本特性,这里只罗列部分. 块(Blocks) 块是对C语言的一种扩展,它并未作为标准ANSI C所定义的部分,而是Apple添加到语言中 ...
- IOS科研IOS开发笔记学习基础知识
这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollVi ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- iOS开发技巧系列---详解KVC(我告诉你KVC的一切)
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...
随机推荐
- nginx+lua+redis实现logserver
http://www.baidu.com/s?wd=nginx lua&pn=10&oq=nginx lua&tn=baiduhome_pg&ie=utf-8& ...
- NOI2010能量采集(数论)
没想到NOI竟然还有这种数学题,看来要好好学数论了…… 网上的题解: 完整的结题报告: 首先我们需要知道一个知识,对于坐标系第一象限任意的整点(即横纵坐标均为整数的点)p(n,m),其与原点o(0,0 ...
- hdu 3367 Pseudoforest
Pseudoforest Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- hdu 3033 I love sneakers!
I love sneakers! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- (七)学习CSS之filter属性
filter: alpha(opacity=,finishopacity=,style=)??? alpha是来设置透明度的,它的基本属性是filter:alpha(opacity,finishopa ...
- Gen_fsm行为实践与分析
1.简介 Gen_fsm是一个通用的有限状态机,它描述了这样的一组关系: State(S) x Event(E) -> Actions(A),State(S') 这个关系意味着:如果在S状态下发 ...
- Educational Codeforces Round 3 E (609E) Minimum spanning tree for each edge
题意:一个无向图联通中,求包含每条边的最小生成树的值(无自环,无重边) 分析:求出这个图的最小生成树,用最小生成树上的边建图 对于每条边,不外乎两种情况 1:该边就是最小生成树上的边,那么答案显然 2 ...
- 黑盒测试用例设计方法&理论联系实际-> 功能图法
一. 概念 功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳 ...
- uva 11168
题意:给出平面上的n个点,求一条直线,使得所有点在该直线的同一侧且所有点到该直线的距离和最小,输出该距离和. 思路:要使所有点在该直线的同一侧,明显是直接利用凸包的边更优.所以枚举凸包的没条边,然后求 ...
- i++ 和 ++i 效率的分析
我们通常在写for循环 的时候,要实现变量 i 的自增 1 :往往会在i++ 和++i中随便挑一种写,对于i++和++i的理解,我们往往停留在返回的值的不同,其实i++与++i在实现效率上也有一定的不 ...