类的声明
- 完整地写一个函数:函数的声明和定义(实现)
- 完成的写一个类:类的声明和实现;
- 类的声明:@interface 类名 @end
- 类的声明 :@interface Car @end
- 类的实现:@implementation Car @end;
- 类的声明:用来声明对象的属性(也叫成员变量)和行为;类的声明的大括号是用来声明对象的属性;
- NSObject让Car这个类具备创建对象的能力;它在Foundation框架中,所以要引入Foundation框架;
#import<Foundation/Foundation.h> @interface Car:NSObject // 其中Car是一个类,它的父类是NSObject { int wheels;//声明对象的属性;对象的属性写在大括号内;里面的属性称为成员变量;成员变量默认会初始化为0;大括号里面只能写属性;不能写行为; int speed; } @end @implementation Car { } int main() { //在OC中想执行一些行为就写上[中括号];需要行为执行者和行为名称;利用类来执行某个行为; //执行了Car这个类的new行为来创建新对象; [Car new]; }
- 创建对象就会分配内存;每个对象都有存储空间存放成员变量,都会自动初始化为0;我觉得这跟创建多个对象有关;
- OC中只能用指针来间接操作对象;
- 每个对象通过类创建出来,都会具有类的成员变量;
- Car *p = [Car new];定义了一个指向Car类型的对象;p以后是指向Car类型的对象;
- [Car new]会创建一个新对象,并且会返回对象本身;(新对象的地址);OC对象的本质就是结构体;
- p->wheels =4;//给p所指向对象的wheels属性赋值;
- p->speed = 250;//
- 成员变量也叫实例变量;对象里面的属性默认是不允许指针直接访问;需要加上@public在前面;
- @public可以让外部的指针间接访问对象内部的成员变量(实例变量);
{ @public int wheels; int speed; }
- Car *p2 =[Car new];又创建一个新对象;
- .
- 给车子加上一些行为(功能),我们c语言一般指的是函数;
- 行为也叫方法;=功能
- @interface的大括号里面只能写属性;方法写在大括号外面;
- 方法的格式:方法名;参数;返回值;和函数类似;方法也是分(声明和实现的);
- //只要是OC对象的方法,必须以减号开头;
- //OC方法中任何数据类型都必须用小括号()扩住;
- //OC方法中的小括号,只能用来扩住数据类型;例如(void)
- OC方法和函数不一样;
- - (void) run;//类方法的声明;
- NSObject是一个类;要调用这个类,需要引入Foundation框架;
- %p指的是地址;一个指针的大小是8个字节;
方法的实现
- 类的实现就是写方法的实现;方法的实现就是说清楚方法里面有什么代码;
- 如果要执行方法或行为,需要写中括号【】;[p run]给p指向对象发送一条run消息;
- 具备创建对象的能力;
@interface 类名 :NSObject { 成员变量; 成员变量; } 方法声明; 方法声明; 方法声明; @end @implementation 类名 -(void)walk { NSLog(@"走了一段路"); } @end int main() { return 0; }
- 每一个对象都会占用存储空间;每次调用类的时候,会将类放到内存中;类从头到尾只占据一份存储空间;
- 在使用类创建对象之前,会将类加载进内存;
- 每个对象内部默认都会有一个isa指针,这个指针指向这个对象的类;
- 通过isa指针,我们可以知道我们可以调用哪些方法;
- OC里面的对象不会自动回收的;
- @interface就好像暴露在外面的钟表面;
- @implementation就号线个隐藏在时钟内部的构造实现;
- 常见错误:
- 在interface里面声明的成员变量不允许赋值;不能写成static int wheels;
- 不能用static修饰成员变量和方法;
- 方法的声明必须放mian前面,但是实现不必要;
方法和函数的区别;
- 以 - 开头都是对象的方法;
- 对象方法的声明必须写在@interface和@end之间;
- 对象方法只能有对象来调用,因为对象方法只归类或对象所有;
- 函数能写在文件中的任意位置(除了@interface和@end之间;);函数归文件所有;
- 函数和对象一点关系都没有;函数不能写在@interface里面;
- 函数不能通过对象的变量名来范围对象的变量;
- 函数可以写在@implementation里面如:
@implementation Car void test() { NSLog(@"调用了test函数"); } -(void)run { test(); NSLog(@"%d个轮子的车跑起来");
结构体在变量的同时才能够赋值;
练习:
- 学生:成员变量:性别、生日、体重、最喜欢的颜色、狗(体重、毛色、吃、跑);
- 方法:吃、跑、遛狗(让狗跑)、喂狗(让狗吃)