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.    对象与函数参数
➢    对象成员变量作为函数参数
➢    指向对象的指针作为函数参数
    修改指向指向对象的成员
    修改指针的指向

 

posted on 2014-04-17 23:51  ゴルツの惠斌纳閣下  阅读(223)  评论(0编辑  收藏  举报