------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1 类的定义
@interface ClassName:NSobject //声明
@end
上述的代码定义了一个类,类名ClassName,继承自NSobject 。定义的方法属性放在上面两个@语句之间。类的声明放在.h文件中,类的实现放在相应的源代码文件中,即.m文件中。
每个实例变量和方法声明都以分号结尾。
2 成员声明
就是在类中声明的变量。要想使用实例变量,就要对实例变量进行声明和定义,实例变量的声明、定义和变量的声明、定义是一样的,并且它的声明和定义也是在一起进行的。一般在接口文件中对实例变量进行声明和定义。语法如下:
在OC中提供了访问限定符对实例变量的作用域进行控制,如下所示:
① @public:作用域不受限制。
② @protected
③ @private
④ @package:在所属类中是@public,但是在其他类中是@private
当实例变量声明和定义好后,就可以对其进行使用了,实例变量使用的语法
形式如下:
类对象名->实例变量
@interface SimpleClass:NSobject {//声明
@public
int abc;
}
@end
3 方法声明
要使用方法,就要对方法进行声明,方法的声明,要在接口文件中进行,其
语法形式如下:
-/+ (方法的返回值类型) 方法名;
减号方法(普通方法又称对象方法)申明
加号方法(类方法又称静态方法)申明:类似于C++中的static方法
4 类的实现
头文件.h和代码文件.m可分别存放声明和实现。当你需要在源代码中包含头文件的时候,你可以使用标准的include编译选项,但是Objective-C提供了更好的方法#import选项。它和#include选项完全相同,只是它可以确保相同的文件只会被包含一次。Objective-C的例子和文档都倾向于使用#import。例如:
#import “XYZPerson.h” //导入头文件
@implementation XYZPerson
//方法的实现。
@end
5 方法定义
方法声明好以后,就要在实现文件中对声明的方法进行定义,其语法形式如
下:
-/+ (方法的返回值类型) 方法名{ }
6 带参方法
带有参数的方法(上面是无参方法的声明、定义和调用)
① 带有一个参数
声明:-/+(方法的返回值类型)方法名:(参数类型) 参数名;
定义:-/+(方法的返回值类型)方法名:(参数类型) 参数名{ 语句;}
调用:[对象名 方法名:参数]和[类名 方法名:参数]
② 带有多个参数
声明:-/+(方法的返回值类型) 方法名1:(参数类型)参数名1 方法名2:(参数类型)参数名2......;
定义:-/+(方法的返回值类型) 方法名1:(参数类型)参数名1 方法名2:(参数类型)参数名2......{ 语句;}
调用:[对象名 方法名1:参数1 方法名2:参数2 ......];和[类名 方法名1:参数1 方法名2:参数2 ......];
7 方法调用
方法的调用(消息发送),方法的类型不同使用的调用也不同:
① 对象方法调用形式如下:[对象名 方法名];
② 类方法的调用的语法形式如下:[类名 方法名];
方法声明包括方法类型标识符,返回值类型,一个或多个方法标识关键字,参数类型和名信息。
当你想调用一个方法,你传递消息到对应的对象。这里消息就是方法标识符,以及传递给方法的参数信息。发送给对象的所有消息都会动态分发,这样有利于实现Objective-C类的多态行为。也就是说,如果子类定义了跟父类的具有相同标识符的方法,那么子类首先收到消息,然后可以有选择的把消息转发(也可以不转发)给他的父类。
消息被中括号( [ 和] )包括。中括号中间,接收消息的对象在左边,消息(包括消息需要的任何参数)在右边。例如,给myArray变量传递消息insertObject:atIndex:消息,你需要使用如下的语法:
<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;">[myArrary insertObject:anObject atIndex:0]</span></span>
为了避免声明过多的本地变量保存临时结果,Objective-C允许你使用嵌套消息。每个嵌套消息的返回值可以作为其他消息的参数或者目标。例如,你可以用任何获取这种值的消息来代替前面例子里面的任何变量。所以,如果你有另外一个对象叫做myAppObject拥有方法,可以访问数组对象,以及插入对象到一个数组,你可以把前面的例子写成如下的样子:
[[myAppobject getArrary]insertObject:[myAppObject getObjectToInsert]atIndex:0]
8 实例化对象
声明并创建对象:类名 *对象;
其中,使用“*”,表示定义的对象是对类的一个引用,一般有两种方式对对象进行创建。
① 使用alloc:和init:方法(实例方法)
alloc:方法实现的功能是为对象分配内存空间。init:方法实现的功能是为对象进行初始化。alloc:方法和init:方法可以单独使用进行创建,也可以合在一起使用。单独使用的语法形式如下:
对象名=[类名 alloc];
对象名=[类名 init];
合在一起使用的语法形式如下:
类名 对象名=[[类名 alloc] init]; 例如:myClass *mc=[[myClass alloc] init]
② 使用new:方法(类方法)
有时为了方便,可以将对象的声明和创建合在一起,其语法形式如下:
类名 对象名=[类名 new];
2 类的补充
1) id类型
当用变量保存对象的时候,始终应该使用指针类型。Objective-C对变量包含的对象支持强弱两种类型。强类型(静态类型)指针的变量类型声明包含了类名。弱类型(动态类型)指针使用id作为对象的类型。弱类型指针常用于类的集合,在集合中对象精确的类型可以是未知的。
id类型前没有*,但它还是一个指针,在对象类型未知的情况下,id类型非常有用,例如NSArray。
MyClass* myObject1; //强类型
id myObject2; //弱类型
2) OC中,类或对象的方法的调用都要用到中括号[]。声明和定义不需要。包括
对象的内存分配、初始化以及类的new方法。
总结:
.h文件:放类的声明,包括成员变量、属性和方法声明,关键字@interface声明一个类,同时它必须以@end结束。
.m文件:放属性、方法的具体实现;关键字@implementation用于实现某个类,同时必须以@end结尾。
类方法属于静态方法,对象方法属于动态方法。
类之间存在依赖、关联与继承等关系。