02-OC语法之类与对象
一.OC语法预览
1. 关键字
- 基本上所有关键字都是以@开头
- 下面列举一些常见的关键字,看一眼就行了,不用去翻资料查找它们的含义
@interface、@implementation、@end
@public、@protected、@private、@selector
@try、@catch、@throw、@finally
@protocol、@optional、@required、@class
@property、@synthesize、@dynamic
self、super、id、_cmd、__block、__strong、__weak、
2. 字符串以@开头
比如@"Hello"是OC中的字符串,而"Hello"则是C语言中的字符串
3. 其他语法
二、 类和对象的关系
面向对象中有2个非常重要的概念:类和对象
1. 如何创建对象
1) 面向对象解决问题的时候必须有对象,那如何创建对象呢?
1) 现实生活的例子:如何创造汽车对象?
a) 需要先有汽车的建造图纸,图纸上描述清楚汽车应该具备的属性和功能(行为)
- 属性:轮子数、时速
- 功能(行为):跑
b) 然后再根据图纸上的描述生成汽车
c) 每一辆汽车都是对象,都有自己具体的属性值,都是图纸的实例
d) 图纸是抽象的,房子是具体的。图纸是对房子对象的高度概括
2. OC中的面相对象
1) OC中的类相当于图纸,用来描述一类事物。也就是说,要想创建对象,必须先有类
2) OC利用类来创建对象,对象是类的具体存在
3) 因此,面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象
3. 需要设计哪些类,如何设计类
1) 类的设计,只关心3样东西:
- 事物名称(类名):人(Person)
- 属性:身高(height)、年龄(age)
- 行为(功能):跑(run)、打架(fight)
2) 一般名词都是类
- 坦克发射3颗炮弹轰掉了2架飞机
- 小明在公车上牵着一条叼着热狗的狗
3) 拥有相同(或者类似)属性和行为的对象都可以抽像出一个类
一、 定义OC的类和创建OC的对象 ➢ 接下来就在OC中模拟现实生活中的情况,创建一辆车出来。首先要有一个车子类,然后再利用车子类创建车子对象 ➢ 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明、类的实现(定义)。跟函数类似,函数有分声明和定义 1. 类的声明 1) 代码编写 ➢ 定义一个Car类,拥有2个属性:轮子数、时速,1个行为:跑 ➢ 类名\属性的命名规则:标示符的规则 ➢ 类名的命名规范:有意义、驼峰标识、首字母大写 #import <Foundation/Foundation.h> // 类的声明 @interface Car : NSObject { @public int wheels; // 多少个轮子 int speed; // 时速 } - (void)run; // 跑的行为 @end 2) 成员变量 ➢ @interface的大括号{}中声明的变量:wheels、speed ➢ @interface的大括号和函数的大括号是不一样的 ➢ 默认会初始化为0 3) @public @public可以让Car对象的wheels和speed属性被外界访问 4) NSObject 加上:NSObject的目的是让Car类具备创建对象的能力 2. 类的实现 // 类的实现 @implementation Car - (void) run { NSLog(@"%i个轮子,%i时速的车子跑起来了", wheels, speed); } @end 3. 创建对象 1) 代码编写 // 主函数 int main() { // 创建车子对象 Car *c = [Car new]; c->wheels = 3; c->speed = 300; [c run]; return 0; } 2) main函数的代码分析、内存分析(对象在内存中有成员) ➢ [Car new]每次都会创建出新的对象,并且返回对象的地址,那么就应该用一个指针变量保存对象的地址 Car *c = [Car new]; 用一个指针变量c指向内存中的Car对象 ➢ 设置车子对象的属性 跟用指向结构体的指针访问结构体属性一样,用-> c->wheels = 3; c->speed = 300; 4. 创建多个Car对象 ➢ 分别只设置wheels、speed属性 Car *c1 = [Car new]; c1->wheels = 4; Car *c2 = [Car new]; c2->speed = 250; [c1 run]; ➢ 1个赋值给另一个,然后修改属性 Car *c1 = [Car new]; c1->wheels = 4; c1->speed = 250; Car *c2 = c1; c2->wheels = 3; [c1 run]; 5. 面向对象封装的好处 ➢ 更加接近人类的思考方式 ➢ 只需要关注对象,不需要关注步骤 6. 对象与函数参数 ➢ 对象成员变量作为函数参数 ➢ 指向对象的指针作为函数参数 修改指向指向对象的成员 修改指针的指向
我就是我 是颜色不一样的烟火 天空开阔 要做最坚强的泡沫 我喜欢我 让蔷薇开出一种结果 孤独的沙漠里 一样盛放的赤裸裸