zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    被.net郁闷的一天
    使用批处理出现奇怪的现象
    我们应该更相信ghost
    asp.net设置默认按钮的一种方法(041217更新)
    asp中access到sql server导入升级后要做的工作。
    一种简单方便的权限控制方案
    为何我的本本不能打开休眠功能?
    祝贺自己的blog开张
    sql server中分页获取数据的存储过程
    httpcompress实际效果能有多少?
  • 原文地址:https://www.cnblogs.com/wangshuo1/p/iOS-4.html
Copyright © 2011-2022 走看看