手动创建第一个OC程序
手动创建第一个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的源文件,如下
编辑
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();
编译
cc -c a.m b.m链接
cc a.o b.o -framework Foundation运行
./a.out
include与import的区别
区别很简单,C语言都是用include,OC添加的import,可以自动给我们去重,就不用我们再操心是不是include重复了,写OC程序就直接使用import就好了
技巧
以后我们写IOS的程序,工程肯定会很庞大,XCode给我们提供的了很多的框架,有很多很多的库,那么我们用到多少库就要import多少个库吗?
很显然不用,每个库有一个主头文件,命名与框架命名一样,例如:
#import <Foundation/Foundation.h>
手动创建第一个OC程序的更多相关文章
- [OC笔记]我的第一个OC程序
这是我第一个OC程序,详情都写在了注释里面,讲的是Student和Book这两个类的创建和使用.(是不是觉得student这个类在各种语言入门代码里经常出现呢?真实有爱) 看完这些,你会发现,咱们其实 ...
- IOS开发——01_第一个OC程序
本文目录 一.新建Xcode项目 二.运行项目 注:建议先学习C语言, 如果你还没有编程经验,看不懂的地方可以在评论区提出,本文使用的为Xcode6.1版本,与之前版本会有所差异,但总体不变. 另:还 ...
- 【Objective-C】04-第一个OC程序解析
说明:这个Objective-C专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序猿,可以高速上手Objective-C.假设你还没有编程经验,或者对Objective-C.iOS开发 ...
- 第一个OC类、解析第一个OC程序
01第一个OC 类 本文目录 • 一.语法简介 • 二.用Xcode创建第一个OC的类 • 三.第一个类的代码解析 • 四.添加成员变量 • 五.添加方法 • 六.跟Java的比较 • 七.创建对象 ...
- 第一个OC程序
第一个OC程序源码如下: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @auto ...
- 【Objective-C】03-第一个OC程序
一.打开Xcode,新建Xcode项目 二.选择最简单的命令行项目 因为我们只是学习OC语法,还未正式进入iOS开发,所以选择命令行项目即可 三.输入项目名称,选择Foundation框架进行创建项目 ...
- Windows Azure入门教学系列 (一): 创建第一个WebRole程序
原文 Windows Azure入门教学系列 (一): 创建第一个WebRole程序 在第一篇教学中,我们将学习如何在Visual Studio 2008 SP1中创建一个WebRole程序(C#语言 ...
- 纯小白创建第一个Node程序失败-容易忽略的一个细节
一直觉得自己基础还很差,所以自觉不敢去碰node.js,但又对其心怀好奇.恰巧最近有一点空闲时间,忍不住去试了一下水 这不,在创建第一个node程序时就吃了闭门羹,总是提示我没有定义,如下图, 这 ...
- “全栈2019”Java第四章:创建第一个Java程序
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- The first week CorelDRAW 课总结:
1.这节课学到了什么知识? 答:(1)认识了CorelDRAW X4的工作界面(由标题栏 菜单栏 工具栏 属性栏 工具箱 页面控制栏 状态栏 绘图区和调色板组成): (2)CorelDRAW X4的基 ...
- Spring Cloud学习笔记-008
继承特性 通过上节的示例实践,当使用Spring MVC的注解来绑定服务接口时,几乎完全可以从服务提供方的Controller中依靠复制操作,构建出相应的服务客户端绑定接口.既然存在这么多复制操作,自 ...
- 从三个开源项目认识OpenFlow交换机 - OVS
在SDN/NFV的网络革新技术浪潮的引领下,催生了诸多数据面开源方案的诞生.业界知名度较高的有OVS(Open vSwitch).FD.io (Fast Data I/O).ODP(Open Data ...
- [Codeforces 919E]Congruence Equation
Description 题库链接 求满足 \[n\cdot a^n\equiv b \pmod{p}\] 的 \(n\) 的个数, \(1\leq n\leq x\) , \(a,b,p,x\) 均已 ...
- 栅栏(fence)
[问题描述]小 v 家有一条栅栏,由 n 个木板顺序组成,第 i 个木板的高度是 Ai.现在小镇上流行在栅栏上画矩形,所以小 v 也要在自家的栅栏上画.若要在区间[x,x+k-1]这个区间画一个宽度为 ...
- [Codeforces]850E - Random Elections
FWT裸题,写了下模板 #include<cstdio> #define ll long long #define r register int #define MN (1<< ...
- ●BZOJ 2560 串珠子
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2560 题解: 容斥,状压计数dp 首先求出一个数组 g[s] 表示集合内的点的连边方案数(两 ...
- Spring学习笔记4——AOP
AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能. 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 ...
- Delphi 7连接MySql 5.5.15(转)
网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的方法,以备所需.系统环境:Windows XP SP3软件环境:Delphi 7 .mysql-installer- ...
- Echarts 地图添加自定义区域
使用 Echarts 生成地图时,如果需要添加一些自定义区域,该怎么做呢?请看下面示例. 生成原始地图 index.hmtl 引入 Jquery 和 Echart <!DOCTYPE html& ...