黑马程序员——ios学习笔记 OC 类

------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结尾。

类方法属于静态方法,对象方法属于动态方法。

类之间存在依赖、关联与继承等关系。 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值