黑马程序员——OC语言基础---类和对象

                                                                    ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------

一、NSLog函数使用方法

1、NSLog的介绍 

NSLog是cocoa的框架中提供的一个方法 

1、NSLog用法: 

NSLog(@"this is a test"); //打印一个字符串

NSString *str = @"hello itcast!";

NSLog(@"string is:%@",str);//使用占位符,%@表示打印一个对象,%@ OC特有的

NSLog(@"x=%d, y=%d",10,20);//使用多个占位符,%d表示整型数

不能使用Printf打印OC中的对象 (%@占位符不能用),没有结果。  

2、NSLog和printf使用的差异

1、NSLog 会自动换行  而printf不会自动换行

2、NSLog 会自动输出时间等项目信息,printf不会输出调试信息

3、NSLog 函数的参数是一个NSString 对象,printf是一个字符串常量指针

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        //NSLog和printf使用的差异
        //1、NSLog 会自动换行  而printf不会自动换行
        //2、NSLog 会自动输出时间等项目信息,printf不会输出调试信息
        //3、NSLog 函数的参数是一个NSString 对象
        //         printf是一个字符串常量指针
        NSLog(@"Hello, World!");
        printf("Hello, World!\n");        
        //2、NSLog格式化输出的问题        
        int a = 5;
        float f1 = 2.3f;
        double d1 = 3.14;
        char ch = 'X';
        char *str="张三丰";
        //如果能够运行,说明OC向下兼容C
        printf("%d,%.2f,%.2f,%c\n",a,f1,d1,ch);
        printf("%s\n",str);        
        //NSLog格式化输出
        NSLog(@"%d,%.2f,%.2f,%c",a,f1,d1,ch);
        NSLog(@"---->%s",str);  //不能这么写
        //OC中自己特有的字符串表示方法
        //用%@输出字符串
        NSString *str1 = @"张三丰";
        NSLog(@"%@",str1);        
        //使用printf能够打印str1?
        //不能,NSString 是OC特有的,C不支持
        printf("===>%@\n",str1);        
    }
    return 0;
}

二、OC中注释及@符号使用 

1、“@”的使用方法 

在OC中“@”有特殊的用法 

1)@"" 这个符号表示将一个C的字符串转化为OC中的字符串对象NSString.

2)@标识符 OC中大部分的关键字都是以@开头的,比如@interface,@implementation,@end @class等 

2、OC中注释 

OC中的注释有两种: 

1)单行注释:// 

2)多行注释:/* */ 

3)文档注释

    /**

     * 狗吃食物的方法

     *

     * @param foodName 参数描述

     */

程序编译时,不对注释做任何处理
注意可以出现在程序的大部分的位置。

三、OC和C差异学习

1、OC新增的数据类型介绍 

1)逻辑型 

(1)Boolean 

Boolean 类型指的是用于存储真值和假值的变量,一般用于程序流程控制 。

Boolean 类型数据允许取值 true 或 false ,也可以是0或非0的整数替代 true 和 false ,这 点和 java语言不同。  

Boolean 和 BOOL 底层逻辑是一样的,使用都是一样的。想用哪个就用哪个。

1、Boolean类型的使用

        Boolean flag = true;

        //false 假  0

        flag = false;

        //true 真  1

        printf("flag = %d\n",flag); 

        //用Boolean类型的变量经常用于条件判断

        if(flag){        

            printf("xxxxxxx\n");        

        } 

(2)BOOL也是用作逻辑判断  

2、存放逻辑值的另外一种方法

        //BOOL 它的取值 YES 和 NO

        //YES  真   1

        //NO   假   0

        BOOL flag2 = YES;        

        printf("YES   = %d\n",YES);

        printf("flag2 = %d\n",flag2);  //         

        flag2 = NO;  //0        

        //flag2 == YES

        if (flag2) {

            printf("0000000000\n");

        } 

查看底层代码发现,YES和NO 其实就是1和0  

2、OC中的新增异常捕捉方法 

@try .... @catch .... @finally

代码有可能抛出有可能抛出的异常是封闭在一个@ try块。 @catch()块包含为@ try 块抛出的 异常的异常处理逻辑。一个@ finally块包含代码必须执行是否引发异常与否。您可以使用@throw 指令抛出一个异常,这基本上是一个对Objective – C对象的指针。你可以使用NSException对象 但不限于他们。

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {       
        //Boolean的使用
        //true 1   false  0
        Boolean flag = true;       
        if(flag){            
            NSLog(@"真 %d",flag);
        }else{           
            NSLog(@"假 %d",flag);
        }
        //BOOL类型
        BOOL flag2 = YES;
        if(flag2){           
            NSLog(@"BOOL YES 真 %d",flag2);         
        }else{         
            NSLog(@"BOOL NO 假 %d",flag2);
        }                         
    }
    return 0;
}

四、面向对象编程概念

1、面向对象的概念 

面向对象(object-oriented ;简称: OO) 至今还没有统一的概念,我这里把它定义为: 按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世 界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。 

面向对象编程(Object Oriented Programming-OOP) 是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作应用数据、状态,以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。  

优点:
大幅度提高软件项目的成功率

减少维护费
高可移植性和可靠性

面向对象设计三个主要特征

封装性

多态性 

继承性  

抽象性  

2、面向对象和面向过程的区别  

面向过程
   强调的是功能行为

   关注的是解决问题需要哪些步骤 

面向对象

   将功能封装进对象,强调具备了功能的对象
   关注的是解决问题需要哪些对象
   面向对象是基于面向过程的。

五、类和对象 

1、类(class)和对象(object) 

类(class): 

    类是具有相似内部状态和运动规律的实体的集合(或统称、抽象)。

对象(object):

    即指现实世界中各种各样的实体。它可以指具体的事物也可以指抽象的事物。在面向对象概念中我们把对象的内部状态称为属性、运动规律成为方法或事件。 

消息(Message): 

    消息是指对象间相互联系和相互作用的方式。一个消息主要由5部分组成:发送消息的对象、 接收消息的对象、消息传递办法、消息内容(参数)、反馈。OC中描述事物通过类的形式体现,类是多个同种类型事物的抽象,概念上的定义。 

一个类可以实例化多个对象

类和对象之间的关系  

类(Class) 

一个类由3个部分构成 

    类的名称:类名 

    类的属性:一组包含数据的属性

    类的方法:允许对属性中包含的数据进行操作的方法 

对象(Object)

    是系统中的基本运行实体 

    对象就是类类型(class type)的变量 

    定义了一个类,就可以创建这个类的多个对象

    一个类就是具有相同类型的对象的抽象 

2、类的构成 

   人的类设计,只关心3样东西: 

     事物名称(类名):人(Person) 

     属性:身高(height)、年龄(age) 

     行为(功能):跑(run)、打架(fight) 

3、类的抽象 

     如何把日常生活中的事物抽象成程序中类?拥有相同(或者类似)属性和行为的对象都可以抽像出一个类 

六、类的声明和实现 

1、关于类的几个名词 

类 

    .h:类的声明文件,用于声明成员变量、方法。类的声明使用关键字@interface和@end。 

    注意:.h中的方法只是做一个声明,并不对方法进行实现。也就是说,只是说明一下方法名、方 法的返回值类型、方法接收的参数类型而已,并不会编写方法内部的代码。

    .m:类的实现文件,用于实现.h中声明的方法。类的实现使用关键字@implementation和@end。 

方法 

    方法的声明和实现,都必须以 + 或者 - 开头

    + 表示类方法(静态方法)

    - 表示对象方法(动态方法) 

    在.h中声明的所有方法作用域都是public类型,不能更改 

成员变量(实例变量\属性) 

    成员变量的常用作用域有3种: 

    @public 全局都可以访问 

    @protected 只能在类内部和子类中访问 

    @private 只能在类内部访问 

2、声明一个类 

     1)声明类使用关键字 @interface 

     2)声明类,我们通常放到.h的头文件中 

3、实现一个类 

   1)实现一个类 使用关键字:@implementation 

     2)实现一个类通常放到.m的文件中 

     3)实现类主要是对方法的具体实现 

七、无参方法声明实现及调用 

1、无参方法声明实现及调用 

OC中的方法分为:对象方法和类方法:  

对象方法 

(1)对象方法以-开头如 -(void)xx; 

(2)对象方法只能由对象来调用 

(3)对象方法中可以访问当前对象的成员变量 

(4)调用格式 [对象名 对象方法名];  

类方法 

(1)类方法以+开头 如+(void)put;

(2)类方法只能由类来调用 

(3)类方法中不能访问实例(成员)变量,因为类方法由类来调用,并没有创建存储空间 来存储类中的成员变量。

(4)调用格式:[类名 类方法名];

(5)类方法的好处和适用场合: 

     不依赖于对象,执行效率更高;
     能用类方法解决的问题,尽量使用类方法;
     场合:当方法内部不需要使用到成员变量时,可以改为类方法。 

2、方法的调用 

使用对象调用方法就是OC中的消息机制 oc语言中采用特定的语言调用类或者实例(对象)的方法称为发送消息或方法调用。  

oc中方法的调用有两种: 

1)[类名或者对象名 方法名]; 

2)对象名.方法名 (点语法,以后再讲) 

八、有参方法声明实现及调用 

1、有参方法声明和实现 

 带参数的方法的定义和实现

声明: 

注意:冒号也是方法名的一部分。  

2、有参方法调用 

带参数的方法调用: 

C的函数 

    int sum(int x,int y){  

        return x+y;

    }

OC的方法

    -(返回值类型)方法名1:(参数类型) 参数名;   //有一个参数的方法 

    -(返回值类型)方法名1:(参数类型1) 参数名1  and:(参数类型2) 参数名2;   //有2个参数的方法 

    //sum ----> OC的方法

方法的声明    

    -(int)sum:(int) x and:(int) y;

方法的实现 

    -(int)sum:(int) x and:(int) y

        return x+y;

}

                                                                -------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值