OC中类
C语言中函数分为声明和实现,OC中定义一个类也分为实现和声明。@interface开始,@end结尾。
声明一个类的目的就是告诉系统,这个类中有哪些属性和方法;
OC类声明中属性只能写在@interface和@end的{}之间.
注意:在编写OC类属性的时候,建议将所有属性的名称前面加上_;
//类首字母必须大写
@interface Iphone
{
float _model;
int _cpu;
double _size;
int _color;
}
@end;
在OC中想要通过一个类来创建一个对象,必须给类发送一个消息(好比在C语言中调用方法一样)。
如何发送:在OC中只要想发送消息就先写上[类名/对象名 方法名]
继承自Object就有了new方法创建对象。
系统做的三件事:
1.为Iphone类创建处理的对象分配存储空间;
2.初始化Iphone类创建出来的对象属性;
3.返回Iphone类创建的对象对应的地址。
//通过一个Iphone类型的指针接收了Iphone对象的地址
如Iphone *p=[Iphone new];
//OC中的类本质是一个结构体,所以p这个指针其实就是指向一个结构体。
默认情况下OC中对象属性是不能访问的,protected的,加上@public。只要让类中属性公开,就可以通过指向结构体的指针来访问。
OC中的方法
OC中的方法,如果没有形参不需要写()。因为OC方法中的()有特殊的用途,OC方法中的()是用来扩住数据类型的。
1.确定函数名称;
2.确定形参;
3.确定返回值;
4.确定返回值类型
OC中方法如果有参数,那么每个参数的数据类型前面必须加上一个:冒号也是方法名称的一部分。
从第二个参数开始,为了提高阅读性,OC方法运行我们给每个参数添加一个标签来说明当前参数的意义。
类方法
对象方法
类的第0个属性并不是_age,而是isa;
isa就是创建这个对象实例的那个类对象;
类对象中存在着当前类中所有的方法。
发送消息调用方法的时候,isa指针
写在类声明的大括号的变量,我们称之为成员属性;
成员变量只能通过对象来访问。
成员变量不能离开类,离开类之后就不是成员变量,成员变量不能在定义的时候初始化;
存储:堆;
存储在堆中的数据,不会被自动释放,只能程序员手动释放。
OC类中的self
在类名中调用类方法,除了类名称之外,还可以使用self调用。
self不仅仅可以调用类方法,还可以调用对象方法。
如果self在对象方法中,那么self就代表调用当前对象方法的那个对象;
如果self在类方法中,那么
setter与getter方法:
setter方法:
作用:设置成员变量的值;
写法:setter方法一定是对象方法
一定没有返回值;
一定以set开头,并且set后面跟上需要设置的成员变量的名称去掉下划线,首字母大写
一定有参数,参数类型一定和需要设置的成员变量的类型一致,并且参数的名称就是成员变量 名称去掉下划线。
getter方法:
1.一定是对象方法;
2.一定有返回值,返回值类型与变量类型一致;
3.与java getter方法不同的是,不需要写getter
直接是成员变量名称去掉_
-(void)size{
return _size;
}
4.一定没有参数
在Xcode4.4之前,可以使用property来代替setter与getter方法的实现。也就是说写上@property就不用写getter与setter方法的声明。
@property是编译器指令;
@property age;那么setter是setAge,getter方法就是age;
如果是@property int _age,那么setter就是set_age,getter是_age
@synthesize是一个编译器指令,它可以简化我们getter与setter方法的实现
@synthesize age;
//但是必须要有属性来接收
因此需要写成
@synthesize age=_age;
代表着把赋值的age给_age;
需要将传入的值赋值给谁和返回谁的值给调用者。
//-(void)setAge:(int)age{
}
-(int)age{
}