手动创建第一个OC程序

创建一个文件夹,文件夹内创建一个a.m的OC源文件,并编辑

之前说过,OC是完全兼容C语言的,那么我们先写个下面的程序尝试一下

#include<stdio.h>

int main(){
printf("这是kongqw的第一个OC程序");
return 0;
}

运行

  • 编译,生产.o目标文件

    cc -c a.m
  • 链接,生成可执行文件

    cc a.o
  • 运行

    ./a.out

由上可见,OC与C语言是完全兼容的,OC的源文件也可以写C语言代码


下面再使用OC的语法输出一段文字

  • 编辑源文件


    #import <Foundation/NSObjCRuntime.h> int main(){
    NSLog(@"我是使用OC语法输出的一段文字");
    return 0;
    }
  • 编译源文件,生成.o目标文件

    cc -c a.m
  • 链接,生成.out可执行文件

    这里要格外注意一点,链接的时候要使用framework参数加入Foundation框架

    原因很简单,正常不加参数的时候,我们是写C语言代码,默认会给我们链接C的库,现在我们写的是OC的程序,OC给我们封装了很多他们自己的库,默认是不会给我们链接进去的,所以需要我们手动加入,如果不加,链接会报错,找不到链接

    cc a.o -framework Foundation

P3


以上都是一个源文件的情况,真正的项目中也不可能只有一个源文件,那么如果有多个源文件,我们怎么一起编译呢?

在这里,我们重新创建几个OC的源文件,如下

  1. 编辑

    • a.m 程序入口


      #import "b.h" int main(){
      funInB();
      return 0;
      }
    • b.m


      #import <Foundation/NSObjCRuntime.h> void funInB(){
      NSLog(@"调用了B里面的方法");
      }
    • b.h b的头文件

      void funInB();
  2. 编译

    cc -c a.m b.m
  3. 链接

    cc a.o b.o -framework Foundation
  4. 运行

    ./a.out

include与import的区别

区别很简单,C语言都是用include,OC添加的import,可以自动给我们去重,就不用我们再操心是不是include重复了,写OC程序就直接使用import就好了

技巧

以后我们写IOS的程序,工程肯定会很庞大,XCode给我们提供的了很多的框架,有很多很多的库,那么我们用到多少库就要import多少个库吗?

很显然不用,每个库有一个主头文件,命名与框架命名一样,例如:

#import <Foundation/Foundation.h>

手动创建第一个OC程序的更多相关文章

  1. [OC笔记]我的第一个OC程序

    这是我第一个OC程序,详情都写在了注释里面,讲的是Student和Book这两个类的创建和使用.(是不是觉得student这个类在各种语言入门代码里经常出现呢?真实有爱) 看完这些,你会发现,咱们其实 ...

  2. IOS开发——01_第一个OC程序

    本文目录 一.新建Xcode项目 二.运行项目 注:建议先学习C语言, 如果你还没有编程经验,看不懂的地方可以在评论区提出,本文使用的为Xcode6.1版本,与之前版本会有所差异,但总体不变. 另:还 ...

  3. 【Objective-C】04-第一个OC程序解析

    说明:这个Objective-C专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序猿,可以高速上手Objective-C.假设你还没有编程经验,或者对Objective-C.iOS开发 ...

  4. 第一个OC类、解析第一个OC程序

    01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...

  5. 第一个OC程序

    第一个OC程序源码如下: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @auto ...

  6. 【Objective-C】03-第一个OC程序

    一.打开Xcode,新建Xcode项目 二.选择最简单的命令行项目 因为我们只是学习OC语法,还未正式进入iOS开发,所以选择命令行项目即可 三.输入项目名称,选择Foundation框架进行创建项目 ...

  7. Windows Azure入门教学系列 (一): 创建第一个WebRole程序

    原文 Windows Azure入门教学系列 (一): 创建第一个WebRole程序 在第一篇教学中,我们将学习如何在Visual Studio 2008 SP1中创建一个WebRole程序(C#语言 ...

  8. 纯小白创建第一个Node程序失败-容易忽略的一个细节

    一直觉得自己基础还很差,所以自觉不敢去碰node.js,但又对其心怀好奇.恰巧最近有一点空闲时间,忍不住去试了一下水   这不,在创建第一个node程序时就吃了闭门羹,总是提示我没有定义,如下图, 这 ...

  9. “全栈2019”Java第四章:创建第一个Java程序

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. C++_进阶之函数模板_类模板

     C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...

  2. Go VS Code 调式常见问题处理

    GO VS Code 调式配置 launch.json{ "version": "0.2.0", "configurations": [ { ...

  3. Dev GridControl GridView常用属性

    1.隐藏最上面的GroupPanel: gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值: sValue=Table.Rows[g ...

  4. [LeetCode] Image Smoother 图片平滑器

    Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother t ...

  5. 常用linux命令备忘

    备忘: 关闭防火墙:# systemctl stop firewalld 查看防火墙状态:#  systemctl status firewalld 停止防火墙:#  systemctl disabl ...

  6. Shiro加密

    在开发的时候,很多数据我们都希望是以加密过后的形式存储起来,而不是最原始的数据. 在shiro中也提供了编码,解码,加密,加密算法实现等等一系列的内容. 编码/解码 在org.apache.shiro ...

  7. 【bzoj4443 scoi2015】小凸玩矩阵

    题目描述 小凸和小方是好朋友,小方给了小凸一个 nn × mm (n \leq m)(n≤m) 的矩阵 AA ,并且要求小凸从矩阵中选出 nn 个数,其中任意两个数都不能在同一行或者同一列.现在小凸想 ...

  8. 2015 多校联赛 ——HDU5316(线段树)

    Fantasy magicians usually gain their ability through one of three usual methods: possessing it as an ...

  9. hdu3966 点权模板-树链部分

    Aragorn's Story Time Limit: 10000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  10. Python的序列类型——List

    List 列表 List,本质是一个链表,从链表的实现角度来讲,链表的每一个结点都存放着值和指向下一个节点的指针. 因此链表在内存的存储可以是不连续的,它是一种高效的数据结构.因此列表与字符串的区别是 ...