OC基础
Xcold中.m文件包含了oc代码,由oc编译器处理,c编译器处理.c文件,c++编译器处理.cpp文件
Import和include的区别是确保文件制备包含一次
#import<Fundation/Fundation.h>告诉编译器查看fundation框架中的fundation头文件,框架是一个技术的集合体,包括头文件库,图像和声音,包含十个甚至上百个头文件,但是每个框架都有一个主头文件,包含了这个框架中所有的头文件
NSlog(@“hello o.c”);相当于c中的printf输出语句,@告诉编译器双引号中的字符串要当做NSString处理,
相关术语
1 类:类是一种结构体,表示对象的类型
2 对象:对象是一种结构,包括数据和指向其父类的指针(也称消息)
3 消息:告知对象要执行什么操作
4 方法:是对象要执行操作的代码
Interface部分
在创建类的时候,编译器需要有关类的一些信息,interface可以完成该任务
@interface Circle : NSObject 定义一个类,类的名称是Circle,父类是NSObject
{ ShapeColor fillcolor; 定义了两个实例变量,颜色和边长,花括号内部是Circl ShapeRect bounds; 类对象所需要的数据信息,fillcoulor和bounds的值是
} 类的实例变量
-(void) setFillcolor:(ShapeColor )fillcolor; 定义了撒个实例方法,
-(void) setBounds:(ShapeRect) bounds; 在这里叫做方法声明
-(void) draw;
@end
@Implementation 指令,告诉编译器将为某个类提供代码
(void) setFillcolor :(ShapColor) c 重新定义方法
{
fillcolor = c; c为新的参数名
}
-(void)setRect:(ShapeRect) b
{
bounds = b;
}
- (void) draw
{
NSlog(@“drawing a circle in (%d %d %d %d) in %@”,bounds.x,bounds.y,bounds.width,bounds.height,ColorName(FillColor));
}
@end
实例化对象
当我们创建可爱你的图形,如红色的圆形和绿色的矩形,专业术语是实例化,实例化对象时需要分配内存空间,然后被初始化为一些默认值不同于刚分配空间时的一些随机值,分配空间结束和初始化后,就创建了一个新的对象实例。我们可以通过向类发送一个new消息来创建一个新的对象
在处理对象和类之间的关系时,要注意两个关系继承和复合
继承
继承可以减少大量的重复代码多次出现,避免在修改的时候忘记某一处的修改而导致奇怪的bug,
通过继承可以实现如下的转变
Circle和Rectangle是shape的子类,继承了shape父类的
Fillcorlor和Bounds方法
相关术语
超类(父类):是所继承的类
子类(孩子类):实施继承的类
改变方法的实现需要重写父类的方法,
方法调度的机制
当代码发送消息的时候,将在当前类中进行查找相应的方法,如果调度程序无法在当前类中找到该方法,就会到该对象的超类中查找,
实例变量
创建一个新的对象时,对象要先继承来自父类的实例变量,然后才可以添加自己的实例变量
每个方法调用都会有一个self指针,指向消息接受对象
Super关键字
为了调用父类的方法要用super作为方法调用的目标