OC简介

作者: 越天高 | 来源:发表于2019-02-19 11:30 被阅读35次

    OC与C对比

    1. 源文件对比

    C语言中常见源文件.h头文件,.c文件
    .h 头文件,用于存放函数声明
    .c C语言源文件,用于实现头文件中声明的方法
    OC中的源文件.h头文件,.m与.mm的实现文件
    .h 头文件,头文件包含类、方法、属性的声明。
    .m/.mm 类的实现文件,参与编译的文件,用来实现类中声明的方法

    2. 关键字对比
    gjzdb.png

    3. 数据类型对比

    c的数据类型


    数据类型.png

    OC的数据类型


    数据类型2.png

    BOOL 只有两个取值真和假
    NSObject * OC中的对象类型
    id 动态对象类型,万能指针
    SEL 选择器数据类型
    block 代码块数据类型

    OC中的类

    Objective-C是一种面向对象的语言,定义类是它的基本能力。
    那什么是类呢?类是用来描述对象的,它是一系列方法和属性的集合
    Objective-C的类声明和实现包括两个部分:接口部分和实现部分。
    想要定义方法也就C语言中的函数,那么就必须先有类的存在

    4. 流程控制语句对比

    C语言中使用的流程控制语句OC中都可以应用
    if 语句
    switch语句
    while语句
    do while语句
    for语句
    break关键字
    continue关键字
    增强for循环,用于快速迭代数组或者集合

    C语言for循环

    for (int i = 0; i < 10; i++){
      printf(“%d”,i);
    }
    

    OC增强for循环
    for (NSString *nam

      NSLog(@”%@”,name);
    }
    

    5.函数(方法)定义和声明对比

    C语言中函数的声明和实现

    函数声明:int sum(int a,int b);
    函数实现:int sum(int a,int b){ return a+b; }
    OC中的方法

    方法声明:- (int)sum:(int) a andB:(int) b;
    方法实现:- (int)sum:(int) a andB:(int )b{ return a+b; }
    注意: 方法只能写在类里面, 而函数可以写在任何地方

    对象方法,使用对象调用的方法
    类方法,使用类名调用的方法

    对象方法

    - (id)initWithString: (NSString *)name;
    

    类方法

    + (MyClass *)createMyClassWithString: (NSString *)name;
    

    6.面相对象特性

    封装性
    继承性
    多态性

    7.面向对象新增语法

    • 属性生成器
    @property
    @synthesize
    //声明属性
    @property (nonatomic,strong)NSString *name;
    //合成属性
    @synthesize name = _name;
    
    • 分类
      分类与继承
      使用分类扩展类,无需子类化
    @interface NSString (MyNSString)
    
    - (NSString *) encryptWithMD5;
    
    @end
    
    • 协议
      使用协议声明方法
      协议类似于C#,java中的接口
    @protocol MyProtocol
    
    - (void)myProtocolMethod;
    
    @end
    
    • Fundation框架
      创建和管理集合,如数组和字典
      访问存储在应用中的图像和其他资源
      创建和管理字符串
      发布和观察通知
      创建日期和时间对象
      操控URL流
      异步执行代码

    8.新增异常处理

    用于处理错误信息
    格式:

    @try .... @catch .... @finally
    示例

    //创建对象car
    Car *car = [Car new];
    @try {
    //调用一个没有实现的方法
        [car test];
    }@catch (NSException *exception) {
        NSLog(@"%@",exception.name);
    }@finally {
        NSLog(@"继续执行!\n");
    }
    

    2.#import和#include区别

    #import与#include的类似,都是把其后面的文件拷贝到该指令所在的地方
    #import可以自动防止重复导入
    #import <> 用于包含系统文件
    #import""用于包含本项目中的文件
    #import , 告诉编译器找到并处理名为Foundation.h文件,这是一个系统文件,#import表示将该文件的信息导入到程序中。

    框架地址: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneO S.sdk/System/Library/Frameworks/

    3.NSLog 和printf区别

    NSLog是Foundation框架􏰀供的Objective-C日志输出函数,与标准C中的printf函数类似,并可以格式化输出。

    NSLog传递进去的格式化字符是NSString的对象,而不是char *这种字符串指针
    NSLog输出的内容中会自动包含一些系统信息
    NSLog输出的内容会自动换行

    NSLog声明在NSObjCRuntime.h中

    声明:void NSLog(NSString *format, ...);

    NSLog(@“this is a test”); //打印一个字符串
    NSString *str = @"hello xiaomage!”;
    NSLog(@"string is:%@",str);//使用占位符,%@表示打印一个对象,%@ OC特有的
    NSLog(@"x=%d, y=%d",10,20);//使用多个占位符,%d表示整型数
    

    4.“@”的使用方法

    在OC中“@”有特殊的用法
    @"" 这个符号表示将一个C的字符串转化为OC中的字符串对象NSString.
    @符号 OC中大部分的关键字都是以@开头的,比如@interface,@implementation,@end @class等。

    5. NS 前缀

    NS来自于NeXTStep的一个软件 NeXT Software
    OC中不支持命名空间(namespace)
    NS是为了避免命名冲突而给的前缀
    看到NS前缀就知道是Cocoa中的系统类的名称

    相关文章

      网友评论

        本文标题:OC简介

        本文链接:https://www.haomeiwen.com/subject/wwazeqtx.html