//————————————OC的发展历程—————————————//
1980年,OC语言诞生。
1988年,OC语言库诞生。
1996年,OC语言成为苹果公司专用编程语言。
2004年,Mac OS X以“NS”为前缀(Mac OS X使用以UNIX为基础的操作系统)
2007年,苹果公司发布了OC2.0版本。
//————————————OC的特点—————————————//
兼容性:在OC的代码中可以有C++和C语句,它可以调用C的函数,也可以通过C++对象访问方法。
字符串:通常情况下,OC使用Foundation框架的NSString类型的字符串。
类:定义类是OC的基本功能,OC的类声明和实现包括两个部分:接口部分和实现部分。
属性:属性是OC2.0提出的概念,它是替代对成员变量访问的“读取方法(getter)”和“设定方法(setter)”的手段。
分类:可以通过分类扩展父类的功能。
//————————————OC的编程思想——面向对象编程—————————————//
1.面向对象的三个基本特征:封装、继承和多态。
封装就是把客观事物封装成抽象的类。
继承就是从一般到特殊的过程。
多态提供了同一个接口名称,通过覆盖和重载实现不同的功能。
**********************
接口文件和实现文件
1.OC是一个面向对象的语言,所以整个OC程序是由一些类组成的。每个OC类包含两大块代码,分别叫“接口”和“实现”。
***********************
类和实例
1.就像现实世界中的对象一样,在面向对象编程的世界中,每一个对象都属于一个类型,这个类型称为类。类定义了现实世界中的一些事物的抽象特点。在OC中,定义一个类的一般格式如下:
@interface Member : NSObject
{
NSString *name;
int age;
}
- (NSString *)name;
- (int)age;
- (void)setName:(NSString *)input;
- (void)setAge:(int)input;
@end
2.每个类的实例就是一个对象,例如:member就是Member类的对象:
Member *member = [[Member alloc]init];
类是对象的模型,对象是类的一个实例。类是一种逻辑结构,而对象是真正存在的物理实体。
3.面向对象的分析过程大致分为:划分对象->抽象对象->将类组织成层次结构(通过继承来完成)。
的
4.面向对象的程序设计就是使用类和实例进行设计与实现程序。
5.UIButton *button = [[UIButton alloc] init];
在数据类型的右边有一个星号,所有的OC对象变量都是指针类型的。
等号右边的语句是创建一个对象,这是一个嵌套的方法调用。第一个调用的是UIButton的alloc方法,这是一个相对比较底层的调用,因为该方法其实是为UIButton变量申请一个内存空间。第二个调用的是新创建对象的init方法,这个init方法是初始化变量值。
**********************
消息和方法
1.在面向对象中,直接发给对象的一个命令称为“消息”,而被调用的代码称为方法。给一个对象发送一个消息和调用一个对象的方法基本上同一回事。
2.方法的定义
在OC中,一个方法是类的一部分。一个方法的声明格式为:
+或者- (返回类型)方法名:(参数类型)参数名;
它包含三个方面:
它是一个类方法还是一个实例方法?
它的参数和返回值
方法的名字。
3.类方法和实例方法
3.1。类方法和实例方法是通过方法定义的“+”或“-”来区分的。
3.2.类方法一般用于两个目的:
工厂方法:它是给类分配实例的方法。例如,UIFont类有一个类方法fontWithName:Size:。你提供一个名字和一个字体大小,这个UIFont类就返回一个UIFont实例。
全局公用方法:一个类方法也可以是一个公用方法,这些公用方法可以被任何其他类来调用,而且不需要实例化。例如:UIFont类的familyNames方法返回机器上所安装的字体信息。
4.调用方法
4.1.在OC中,对象的属性变量属于对象的内部数据,通常需要访问这些数据只能通过对象的方法来实现,方法是作用于属性的函数。
4.2.在OC中,把“调用一个函数”称为“向一个对象发送一个消息”,或者称为”调用方法“。调用方法的简单格式是(假设没有输入参数):
[实例 方法];
或者是:[类名 方法];
4.3.一个方法也可以返回值,可以把返回的值放在变量上保存,例如:变量=[实例 方法];
4.4.在OC上,调用一个类或实例的方法,也称为给这个类或实例发消息。类或实例称为“接收方”。所以,调用方法的格式也可理解为:[接收方 消息];
4.5.在术语上,整个表达式也叫做消息表达式。例如:
NSString *s2 = [s uppercaseString];//发送消息“uppercaseString”到s
4.6.如果一个消息是一个带有参数的方法(即在调用一个方法时,可能需要提供输入参数),那么,每一个参数值跟在一个冒号后面。调用格式为:
[接收方 名字1:参数1 名字2:参数2 名字3:参数3 …];
在术语上,方法的名称是”名字1:名字2:名字3…”.
4.7.OC允许在一个方法中调用中嵌套另一个方法,如:
[NSString stringWithFormat:[test fromat]];
但是尽量避免在一行代码里面嵌套调用两个方法。因为这样的话,代码的可读性不好。
4.8.self类似于Java的this,使用self可以调用本类中的方法。
***************************
实例变量
1.实例变量属于一个对象。
2.从OC2.0开始,可以使用“.”来调用一个实例变量。如:aFraction.numerator。
**************************
创建实例的三种方法
1.间接创建实例
如:NSString *s = [s2 uppercaseString];
2.直接创建实例
发送一个alloc方法给一个类,从而直接创建这个类的实例。alloc类方法是在NSObject类上实现的,NSObject类是根类,其他类都从它这里继承。在执行alloc之后,系统就为一个实例分配内存。
3.通过nib文件创建和初始化实例
****************************
对象声明的语法:
类名 *var1, *var2,……….
但是要注意,这只是定义了一个指针变量,尚未为它所包含的数据获得内存空间。在调用alloc方法之后,这些对象才获得(分配)空间。例如:
Member *member;
member = [Member alloc];
在术语上,上述例子中的member称为Member对象,或者称为Member类的一个实例。另外,除了分配空间外,还需要调用init方法来给这个对象设置初值。
***************************
==:比较的是指针,而不是指向指针的内容。
self:这段代码中正在起作用的实例。
//——————————————————OC注释—————————————————//
段(块)注释:“/…/”
行注释:“//”
内容分段:#pragma mark
其实,其中的注释根本不用加,因为它都是英语组成的,通过阅读就可看懂它的意思。
在Xcode中,使用以下方式可以将OC源代码分割成不同的代码块。
#pragma mark - 注释内容
//——————————————————OC的文件扩展名—————————————————//
.h:头文件(也称为接口文件)。头文件包含类、类型、函数和常数的声明。
.m:源代码文件。可以包含oc和C代码。
.mm:源代码文件。带有这种扩展名的源代码文件,除了可以包含OC和C代码外,还可以包含C++代码。仅在你的OC代码中确实需要使用C++类或者特性的时候才有这种扩展名。
//——————————————————OC的导入文件—————————————————//
1.使用#import包含头文件
在C/C++中,为了防止头文件重复包含,我们经常需要用如下代码定义.h文件
#ifndef _MYSOMETHING_H
#define _MYSOMETHING_H
。。。
#endif
OC提供了一个预编译指令#import来简化#include的做法,使用#import,就不用在每个头文件里定义上面的3行条件编译语句。
当然,在OC中,还可以使用#include包含.h文件,但是,很显然,使用#import更方便。
2.导入文件
在.h文件中导入其他的类,使用@class指令。
在.m文件中导入其他的类,使用#import指令。