zoukankan      html  css  js  c++  java
  • 1.2.1 OC概述

    本文并非最终版本,如想关注更新或更正的内容,详见文末的联系方式,如有疏忽和遗漏,欢迎指正。


    本文相关目录:(链接为简书链接)
    ====================== 所属文集:1.2 Objective-C ======================
    1.2.0 开发须知
    1.2.1 OC概述
    1.2.2 类 未发布
    1.2.3 对象 未发布
    1.2.4 面向对象 未发布
    1.2.5 数据类型 未发布
    1.2.6 关键字 未发布
    1.2.7 内存管理->1.0 概述 未发布
    1.2.7 内存管理->2.1 MRC(手动引用计数) 未发布
    1.2.7 内存管理->2.2 ARC(自动引用计数) 未发布
    1.2.8 Category - 分类 未发布
    1.2.9 Protocol - 协议 未发布
    ====================== 所属文集:1.2 Objective-C ======================


    本文目录


    1、OC简介

    OC 发展:

    OC 特点:

    C、OC、C++、C#之间的关联


    2、 新建 OC 项目步骤

    步骤1:打开Xcode,创建一个新项目

    步骤2、选择项目模板(Xcode 8+)

    步骤3、填选项目相关信息

    步骤4、编写代码,选择模拟器,运行(Command+R),并查看运行结果。


    3、 第一个 OC 程序分析

    总体分析

    // #import 表示将该文件的信息导入到程序中
    // 作用:告诉编译器找到并处理名为Foundation.h文件,这是一个系统文件
    // 把Foundation.h引入了,等于把OC的库文件都引过来了
    #import <Foundation/Foundation.h>
    
    // 程序的入口 (argc表示参数数目   argv表示参数值)
    int main(int argc, const char * argv[]) {
        // 这是一个自动释放池,用于回收对象的存储空间
        @autoreleasepool {
            // NSLog是Foundation框架提供的Objective-C日志输出函数,与标准C中的printf函数类似,并可以格式化输出。
            // @“Hello, World!”,是代表NSString字符串对象,它是Objective-C常用的字符串类。
            NSLog(@"Hello, World!");
        }
        // 表示要终止main的执行,一般情况下0代表正常结束,非0代表异常情况, 这是沿用了C语言的习惯
        return 0;
    }
    

    具体分析:

    // "xxx" 首先在当前文件找xxx文件,否则在开发工具里面找,否则在系统中找
    // <xxx> 首先在编译器环境找xxx文件,否则在系统的环境里找
    
    #include <stdio.h>  // 可以使用C语言的 printf 输出函数
    
    // 预处理指令 import 的功能和 include一样, 是将右边的文件拷贝到当前import的位置
    // import优点: 会自动防止重复拷贝(意味着如果头文件写了N次,那么import只会拷贝一次)
    // Foundation.h我们称之为主头文件, 主头文件中又拷贝了该工具箱中所有工具的头文件, 我们只需要导入主头文件就可以使用该工具箱中所有的工具, 避免了每次使用都要导入一个对应的头文件
    // 规律: ① 所有的主头文件的名称都和工具箱的名称一致 ② 所有的主头文件都导入了该工具箱中所有工具的头文件
    // 工具箱的地址: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks
    #import <Foundation/Foundation.h>  // 可以使用OC语言的 NSLog 输出函数
    
    int main(int argc, const char * argv[]) {
        
        // printf - C中的日志输出函数
        // printf不能自动换行
        // printf不会输出调试信息
        // printf()输出字符串的时候,用的是%s
        // printf是一个字符串常量指针
        // printf不能打印OC中的字符串
        // printf不能打印OC中的对象 (%@占位符不能用),没有结果
        printf("c hello world
    ");
        printf("c hello world
    ");
        
        // NSLog - OC中的日志输出函数
        
        // NSLog会自动换行
        // NSLog在输出内容时会附加一些系统信息(如时间等项目信息)
        // NSLog()输出字符串的时候,用的是%@
        // NSLog输出OC的特有的类型 %@(NSString), NSLog 函数的参数是一个NSString 对象
        // NSLog在使用NSLog的时候,在格式控制字符串的末尾加上一个
    是不起作用
        NSLog(@"OC hello World");
        NSLog(@"OC hello World");
        
        // 在oc程序中,使用oc的打印(NSLog),调用了c的函数(sum),输出其结果
        NSLog(@"sum = %i", sum(20, 10));
        return 0;
    }
    

    • 官方类前缀:


    • 第三方类前缀:


    4、OC和C的差异

    源文件对比:

    基本语法对比:

    关键字对比:

    数据类型对比:

    流程控制语句对比:

    函数与方法的定义和声明对比:

    面向对象新增特性:

    面向对象新增语法:

    新增异常捕捉方法:

    格式:
    @try {
    < #statements#>
    }
    
    @catch (NSException *exception) {
    //捕捉最具体的异常类型
    < #handler#>
    }
    @catch (NSException *ne) {
    //捕获一个比较重要的异常类型。
    }
    @catch (id ue) {
    //再次掷出捕获的异常。
    }
    
    @finally{
    //不管有没有异常finally内的代码都会执行。
    < #statements#>
    }
    
    举例:
    #import "ViewController.h"
    
    @interfaceViewController ()
    @end
    
    @implementation ViewController
    - (void)viewDidLoad {
      [superviewDidLoad];     
    
    //注意:try catch 并不能检测所有的错误  
    @try { //此处放的是有可能出错的代码
    
        NSString *str = @"abc";
        NSLog(@"要出异常了");
        [str substringFromIndex:111];      
         
     } @catch (NSException *exception) { //此处放出错以后,我们处理的代码    
    
    NSLog(@"捕捉到的异常");    
    NSLog(@"exception = %s%@",__FUNCTION__, exception);  
    
      } @finally { //不管出没出错,这里的代码一定会执行    
    
    printf("一定会执行的代码!
    ");  
      }
    }
    
    - (void)didReceiveMemoryWarning {  
    [superdidReceiveMemoryWarning];  
    // Dispose of any resources that can be recreated.}
    @end
    

    打印结果:

    Test[14869:2214622]要出异常了
    Test[14869:2214622]捕捉到的异常
    Test[14869:2214622] exception = -[ViewController viewDidLoad]***-[__NSCFConstantString substringFromIndex:]: Index 111 out of bounds; string length 3
    一定会执行的代码!
    

    说明:

    异常捕捉方法是检测oc 中方法是否正确使用,不能用来检测语法错误。只能用来检测方法使用的正确与否。
    

    作者:蓝田(Loto)
    【作品发布平台】

    简书
    博客园
    Gitbook(如果觉得文章太长,请阅读此平台发布的文章,记得给个Star哟~)

    【代码托管平台】

    Github(帮忙点点Star啦~)

    【如有疑问,请通过以下方式交流】

    评论区回复
    发送邮件shorfng@126.com


    本文版权归作者和本网站共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,谢谢合作。


    如果觉得作者很用心,也可以请我喝杯咖啡
    • 支付宝扫一扫 向我付款

    • 你也可以微信 向我付款

  • 相关阅读:
    普通类型(Trivial Type)和标准布局类型(Standard-layout Type)以及POD类型
    设计模式
    网络相关的学习和命令总结
    sheel命令学习和工作总结。
    Makefile的学习
    [UI基础][实现]九宫格之应用程序管理
    [嵌入式][分享][交流]发布一个消息地图的模块
    [UI基础][不会说话的汤姆猫]
    [UI基础][QQ登陆界面]
    volatile的陷阱
  • 原文地址:https://www.cnblogs.com/shorfng/p/6094899.html
Copyright © 2011-2022 走看看