1.@interface Circle :NSObject
- 借口关键字:interface
- @interface Circle : 名为Circle的新类定义的接口。
- 继承自 NSObject;
2{ }的理解
- 其中包含的是类的数据成员;
- 每次创建Circle对象时,都将包含这两个实例变量;
- 注意:fillcolor,bounds 称为类的数据成员;而Circle类对象的值称为实例变量。
3.方法声明
- - (void) setFillColor : (ShapeColor) fillColor ;
- 方法类型 返回类型 方法名 方法接受的参数 参数的类型 参数名
4中缀符
- 利用中缀符,可将方法的名称和参数合在一起;
- 调用带一个参数的方法:
- [circle setFillColor : kRedcolor];
- 调用带两个参数的方法:
- [circle setFillColor:kRedcolor setBounds:rect];
5.
1.@implementation
一个编译器指令,表明将为某个类提供实现代码。
2.接着是各个方法的定义,不必按声明顺序出现,甚至可以实现声明中没有的方法。
3.@interface 和@implemention 间的参数名不同是正确的,且需要不同。
声明处:-(void) setFillColor :(ShapeColor) fillColor;
实现处:-(void) setFillColor :(ShapeColor) c
{
fillColor = c;
}
在实现中,我们必需区分参数名称和实例变量的名称,最简单的方式就是我们将参数重新命名。
4.oc调用方法时,一个隐藏参数(self)将被传递给接收对象,这个参数引用的就是该接收对象。该参数传递过程是秘密和自动的,程序员不必实现。即类中的方法可以直接使用其实例变量的值。
6.实例化:为对象分配内存,并在这些内存中保存一些默认值。
- 向相应的类发送new消息,创建对应的对象。
- new方法等价于alloc+init。
7.id类型变量
- id可以接收指向任意类型的指针。
- 在未接受指针之前,不能调用方法。
8.实现类的三个步骤
类接口最为重要;
超类,数据成员,方法;
超类常使用NSObject,NSObject的子类。
9.
NSLog(@"%@“);
第一个@ 表示后面输出一个NSString类型的对象。
后一个%@ 表示oc的一个任意类型的对象。
10.
Car *car; //定义了一个Car对象的指针
car =[Carnew];//生成了一个Car对象,包含5个空指针,并把地址赋给Car对象指针
new = alloc + init 若要改变初始化状态,对init进行重写。
11.
init 对所有数据成员进行初始化。
有两个数据来源,一个来自超类,一个自身新增。
if(self = [ super init ])
- 此处调用消息[super init],让超类完成初始化;
- init方法返回值(id类型)描述了被初始化的对象。
- 将[super init]的结果赋给self是oc的惯例,以防止超类在初始化过程中返回的对象不同于原先创建的对象。
12.区分new,init 函数
[engine new] = [[engine alloc]init]
- alloc 用后,内存会被清零
- 调用init后,让对象处于可用状态。
13.
NSLog(@"%@",engine); //在cocoa类中添加description方法就可自定义nslog()如何输出一个对象。
结果是:i have an engine
@interface Engine : NSObject
{
}
//-(void)print;
-(NSString *)description;
@end
@implementation Engine
-(NSString *)description
{
return (@"i have an Engine");
}
//-(void)print
//{
// NSLog(@"this is an Engine");
//}
@end //Engine
14.
存取方法(accessor method)
用来读取或改变对像特定属性的方法
修改方法(mutator method)
用来改变对象状态的方法
是类的对象方法。
理解:
setter:为对象中某属性赋值;
getter:提供读取对象属性的途径;
对其他对象属性进行操作时,应该始终使用对象所提供的存取方法,而不直接操作其他对象的属性。
存取方法常成对出现,也可不成对出现。
使用规则:
setter:
set +属性名称
getter:
属性名称
不使用get前缀,因为其在cocoa中有特殊含义:把指针当作参数传入函数,来获取返回值。
对数组操作存取方法的实质:
- 对数组操作,需要数组首地址、数组下标;//数组首地址直接访问类的数据成员,数组下标是参数。
- 在方法中确定数组首地址、下标。
15.类的对象的方法的数据来源有两个
16.return 和exit 的区别
exit()
是一个函数,结束一个进程,将删除进程使用的内存空间,并返回错误信息。
exit 不需要考虑函数返回值类型;
exit (0)--表示正常退出,非0表示非常正退出。
不能轻易使用。
return
返回函数值,是关键字
16.父类指针可以指向子类对象
17.导入头文件
有两种不同的方法
- 尖括号的语句用来导入系统头文件;
- 带引号的语句则说明导入项目本地头文件;
本章总结:
- 面向过程式编程:函数第一,数据第二
- 面向对象编程 :数据第一,函数第二
- 消息,方法,self指针及其三者关系
- 向类发送new消息可创建新对象
- 好的软件实体,应对扩展开放,对修改关闭。