IOS基础之 (四) OC对象

一 建立一个OC的类

完整的写一个函数:需要函数的声明和定义。

完整的写一个类:需要类的声明和实现。

1.类的声明

声明对象的属性和行为

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface Car : NSObject
 4 {
 5     @public
 6     int speed;//速度
 7     int wheels;//轮子
 8 }
 9 
10 - (void) initSpeed:(int)speed withWheels:(int) wheels ;
11 
12 - (void) run;
13 
14 @end

 

第3行:NSObject目的是让Car这个类具备创建对象的能力。

第5行:@public 可以让外部的指针间接访问对象内部的成员变量。

第 6,7行:定义对象的属性。

第10行:定义一个有入参的行为。

第12行:定义对象的行为。只要是OC对象的方法,必须以减号 - 开头。

            在OC方法返回值中任何数据类型都必须用小括号()扩中。

           实现@interface中声明的方法。

2.类的实现

  Car 类的实现。

 1 #import "Car.h"
 2 
 3 @implementation Car
 4 
 5 - (void)run{
 6     NSLog(@"车子跑起来。车速是%d km/h,轮子数是%d", speed, wheels );
 7 }
 8 
 9 - (void)initSpeed:(int)speed withWheels:(int)wheels{
10     self -> speed = speed;
11     self -> wheels = wheels;
12 }
13 
14 @end

 第9行代码: 给对象的属性speed, wheels赋值初始值。不能在类的声明 @interface 中对属性就行初始化。

在xcode中,自动实现函数的实现:

     输入 "-" , 然后输入函数的头几个字母,选中xcode自动弹出的方法。

3.类的调用

 

 1 #import <Foundation/Foundation.h>
 2 #import "Car.h"
 3 
 4 int main(int argc, const char * argv[]) {
 5     Car *car = [Car new];
 6     car -> wheels = 4;
 7     car -> speed = 100;
 8     [car run];
 9     
10     [car initSpeed:200 withWheels:5];
11     [car run];
12     
13     
14     return 0;
15 }

第5行:在OC中,想执行一些行为,就接上一个中括号[行为执行者 行为名称] 。利用类来创建对象。

           [Car new]会创建出一个新对象,并且会返回新对象本身(新对象的地址)。

 第6,7行:给 car所指向对象的wheels,speed属性赋值。

第8行:给car所指向的对象发送一条run消息。

 

二对象与函数参数

例子1

 1 #import <Foundation/Foundation.h>
 2 #import "Car.h"
 3 
 4 void test1(Car *newC){
 5     newC -> wheels  = 5;
 6 }
 7 
 8 
 9 int main(int argc, const char * argv[]) {
10     Car *car = [Car new];
11     car -> wheels = 4;
12     car -> speed = 100;
13     [car run];
14     
15     test1(car );
16     [car run];
17     
18     return 0;
19 }

第16行代码的返回结果为:车子跑起来。车速是100 km/h,轮子数是5

内存图如下:

例子2

 1 #import <Foundation/Foundation.h>
 2 #import "Car.h"
 3 
 4 void test2(Car *newC){
 5     Car *c2 = [Car new];
 6     c2 -> wheels = 5;
 7     c2 -> speed =300;
 8     
 9     newC = c2;
10     newC -> wheels = 7;
11 }
12 
13 int main(int argc, const char * argv[]) {
14     Car *car = [Car new];
15     car -> wheels = 4;
16     car -> speed = 100;
17     [car run];
18      
19     test2( car );
20     [car run];
21     
22     return 0;
23 }

第20行代码的返回结果为 车子跑起来。车速是100 km/h,轮子数是4

内存图如下:

 

 

面向对象封装的好处:

1)更加接近人类的思考方式。

2)只需要关注对象,不需要关注步骤。

 

三 OC对象的类型判断

 

 1 #import <Foundation/Foundation.h>
 2 
 3 @interface A: NSObject
 4 
 5 @end
 6 
 7 @implementation A
 8 
 9 @end
10 
11 
12 @interface B : NSObject
13 
14 @end
15 
16 @implementation B
17 
18 @end
19 
20 
21 int main(int argc, const char * argv[]) {
22     A *a = [[A alloc]init];
23     NSLog(@"%d" , [a isKindOfClass:[NSObject class]]);
24     NSLog(@"%d" , [a isKindOfClass:[A class]]);
25     NSLog(@"%d" , [a isKindOfClass:[B class]]);
26     
27     return 0;
28 }

 返回结果

1 2016-03-06 12:56:18.105 T3[673:22236] 1
2 2016-03-06 12:56:18.106 T3[673:22236] 1
3 2016-03-06 12:56:18.106 T3[673:22236] 0

 

posted @ 2016-02-17 00:17  陈晓楠  阅读(898)  评论(0编辑  收藏  举报