OC 类的声明
用@interface来声明一个类,用冒号表示继承,后面跟父类;
NSObject 是所有类的父类
@end关键字结束
@interface NewClassName : PerentClassName
{
实例变量
}
方法的声明
@end
@implenentation NewClassName
//方法
@end
类的声明主要由两个部分组成:实例变量和方法
实例变量
l 实例变量可以是OC中 任何一种数据类型包括基本类型和指针类型
l 在声明实例变量的时候不能为其初始化,系统会默认初始化
l 实例变量的默认作用域范围是整个类
实例变量类型 | 默认值 | |
Byte | 0 | |
short | 0 | |
int | 0 | |
long | 0L | |
char | ‘\u0000’ | |
float | 0.0F | |
double | 0.0D | |
Boolean | FALSE | |
所有指针类型 | nil |
OC方法的声明
声明格式
-(void)method: (int)arguments;
“-”表示实例方法,“+”表示类方法,返回类型为空,方法名为“method:”冒号是方法名的一部分,后面是方法的类型为int arguments 是参数的名称。
OC中方法的调用
OC语言中采用调用类或实例的方法称为发送消息或方法调用。
[类名or对象名 方法名];
对象.方法名;
OC中的指针
Ø Oc中除了基本数据类型之外的变量都称为指针类型
Ø OC中的对象是通过指针对其操作
如何在内存中区分类和对象?
类是静态的概念,存放在代码区,对象是alloc出来的存放在堆区,类的每个实例变量在不同的对象中都有不同的值(静态变量除外)
方法也只是在被调用的时候,程序运行的时候占用内存。
//声明一个NSString类型的指针变量,不指向任何对象
NSString *s;
//使用alloc创建一个NSString类型的对象并用s指向他,以后可以通过s对其操作
s = [[NSString alloc] initWithString: @”HelloiPhone”];
对象的创建和使用
oc中对象通过指针来声明。如ClassA *object;
oc中对象的创建,使用alloc来创建一个对象。编译其会给object对象分配一块可用的内存地址。然后需要对对象进行初始化后才可以使用。
同一个类的每个对象有不同的实例变量的存储空间
同一类的每个对象共享该类的方法
方法的嵌套调用形式
ClassA *object = [[ClassA alloc] init];
初始化方法的实现
- (id) init
{
self = [superinit];
if(self)
{
//initcode
}
return self;
}
在init方法中,若要父类完成所需要的一次性初始化,需要调用[super init],init方法返回的值(id类型数据),描述了被初始化的对象。
将[super init]的结果付给self是OC的标准惯例。这样做的目的是防止在父类出事化的过程中范回对象不同与原先创建的对象。
指定初始化方法
在一个类里面,具有最完整的初始化参数的初始化方法通常就是指定初始化方法(即参数最多的)必须调用父类的指定初始化方法。通过向super发送相应的消息初始化父类。相反,他们调用参数比自己多的其他初始化方法(通过self发送消息),并未自身没用参数的提供值。在调用你顺序中,最终会调用指定的初始化方法,完成整个初始化过程。
例如
-(id) init{
[selfinitWithTitle: @”task”];
}
-(id) initWithTitle: (NSString *)aTitle {
[selfinitWithTitle: aTitle date:[NSDate date]];
}
-(id) initWithtitle: (NSString *)aTitle
date:(NSString *) aDate{
if(seft= [super init]) {
title= [aTitle copy];
date= [aDate copy];
}
return self;
}
self和super关键字
self指的是类对象的本身
super是父类对象的本身
self用来调用本类对象的方法
super调用父类的方法
self是类的隐藏参数,指向当前调用方法的类,另一个隐藏参数是_cmd,代表当前类的selector。
Super并不是隐藏的参数,他是编译器指示符,他和self指向的是相同的消息接收者。
当前使用self调用方法时,会从当前类的方法列表中开始找,如果没用,就从父类中再找,而super直接冲父类中找。