oc类声明和实现:
类声明:
@interface NewClassName:ParentClassName
{
实例变量;
....
}
方法的声明;
...
@end
类的实现:
@implementation NewClassName
方法的实现
{
//code
}
@end
类的声明放在"类名 + .h"文件中。
如:Person.h文件。
类的声明主要由两部分组成:实例变量和方法。
声明实例变量的格式:变量类型 变量名称。
如:int age;
实例变量:
实例变量额可以使用oc中任何一种数据类型(包括基本类型和指针类型)
在声明实例变量的时候不能初始化,系统会默认初始化。
实例变量的默认作用域是整个类。
Boolean 类型默认是false,所有指针类型默认是nil。
oc方法声明:
-(void) method : (int) arguments;
"-"表示实例方法,"+"表示类方法,返回类型为空,方法名为“method:”(冒号一定不能省略),最后这个方法的参数是一个整型的参数,arguments是参数的名称。
oc中进行方法调用中传递参数时,遵循值传递的原则:基本数据类型传递的是数据值本身,指针类型传递的是对象的指针,而不是对象的本身。
oc中方法的调用方式有两种:
1.[类名或者对象名 方法名];
2.对象名.方法名;
实例:
[ClassOrInstance method];
[ClassOrInstance method:arg1];
[ClassOrInstance method1:arg1 method2:arg2];
[[ClassOrInstance method:arg1] otherMethod];//嵌套发送消息。
oc基本概念——指针:
*oc语言中出基本类型之外的变量类型称为指针类型。
*oc中的对象是通过指针对其操作的。
如何在内存中区分类和对象?
*类是静态的概念,存放在代码区
*对象是alloc出来的,存放在堆区,类的每个实例变量在不同的对象中都有不同的值(静态变量除外)
*方法也只是在被调用的时候,程序运行的时候才占用内存。
/*
声明了一个NSString类型的指针变量,但它并没有指向任何一个对象
*/
NSString *s; //-->nil
/*
使用alloc方法创建了一个NSString
类型的对象,并用s指向它,以后可以通过s完成对其的操作。
*/
s = [[NSString alloc] initWithString @"Hello World"]; // s--> 堆内存地址(譬如:ox10000258)
oc中对象的创建和使用:
1.oc中对象通过指针来声明,如:ClassA *object;
2.oc中对象的创建,使用alloc来创建一个对象。编译器会给object对象分配一块可用的内存地址。然后要对对象进行初始化即调用init方法,这样这个对象才可以使用。如:
Person *person = [Person alloc];
person = [person init];
同一类的每个对象有不同的实例变量的存储空间。
同一类的每个对象共享该类的方法。
方法嵌套的形式来调用,如:
ClassA *object = [[ClassA alloc] init];
对象的初始化: *对象必须先创建,然后初始化,才能使用。 *NSObject *object = [[NSObject alloc] init]; 首先为对象分配内存地址,为初始化做准备。初始化是对象创建过程中将新分配的对象的状态设置为合理的初始值,使之处于可用状态的阶段。通过约定,我们要求初始方法以init开头,并且在成功完成初始化之后,返回一个动态类型对象(id),如果失败则返回nil,初始方法可以包含一个或多个参数用于指定初始值。如下所示: * -(id) initWithArgument:(int) arg; * -(id) initWithArgument1:(int) arg1 xxWithArgument2:(int) arg2; 初始化方法的实现: 在init方法中,若要父类完成所需的一次性初始化,需要调用[super init].init方法返回的值(id型数据),描述了被初始化的对象。 将[super init] 的结果赋值给self是oc的标准惯例,这么做为了防止父类在初始化过程中返回的对象不同于原先创建的对象。 在一个类里面,具有最完整的初始化参数的初始化方法通常就是指定初始化方法,子类的初始化方法必须调用父类的指定初始化方法,通过向super发送相应的消息初始化父类。相反,它们将调用参数比自己多的其他初始化方法(通过向self发送消息)。并为自身没有的参数提供初始值,在此调用序列中,最终将会调用到指定初始化方法,完成整个初始化过程。 当没有指定初始化方法的时候,编译器会为类自动添加init方法,如果有,编译器就不再添加。 Person *person = nil; person = [[Person alloc] init]; 命名规则: *类名首字母大写。 *变量名和方法名首字母小写。 *使用驼峰标示。