① windows怎么配置oc开发环境
安装
上网搜了搜,这方面的资料真是不少,必备的东东是 GNUstep Developer Tools,可以参考这个链接 Windows Installer,安装很简单,按照顺序 GNUstep System、GNUstep Core、GNUstep Developer 安装即可,过程就不表述了。
安装完成后,我们可以用“程序 -> GNUstep -> Shell” 来启动一个模拟 UNIX 控制台,在这下面可以完成开发、编译、执行等工作。
开发
首先我们来写一个 HelloWorld,简单起见,我们在 C 盘根目录下创建 HelloWorld.m 文件,并保存,代码如下:#import <Foundation/Foundation.h>
int main (int argc, const char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello World!");
[pool drain];
return 0;
}
注:关于用什么工具来编写代码,由于我也是初次使用,并没有特别好的工具推荐,我自己使的是 UltraEdit。
编译
由于 HelloWorld.m 是在 C 盘根目录下,所以首先我们将路径切换到 C 盘根目录:$cd C:\
注:cd 这种方式同样适用于切换到任意驱动器或任意子目录下,路径的组织结构与 windows 没有区别,不区分大小写。编译成目标码gcc -fconstant-string-class=NSConstantString -c HelloWorld.m -I /GNUstep/System/Library/Headers
执行上面的命令后,控制台不会有任何输出,这是正确的,否则你需要去检查原因了。同时在 C 盘根目录下会生成一个 HelloWorld.o 的目标文件,在下一步,我们将用它来编译成可执行文件。
编译成可执行文件gcc -o HelloWorld HelloWorld.o -L /GNUstep/System/Library/Libraries/ -lobjc -lgnustep-base
C 盘根目录下会生成 HelloWorld.exe
执行
我们可以直接在 Windows 控制台下执行 HelloWorld.exe,也可以在 Shell 窗口中执行:
在 Shell 窗口输入:./HelloWorld.exe
输出如下:
2011-09-23 13:22:42.828 helloworld[5484] Hello World!
关于工作路径
我们做开发时,项目不可能放在 C 盘根目录下,一般都是有组织的,那么如何编译这类的文件呢?其实方法很简单,使用 cd 命令,进入到 .m 所在的目录下,然后执行编译。
Make
上面的编译过程很繁琐,稍有不慎就可能输入错误,造成编译失败,其实还有一个更简单的方法,就是建立一个 make 文件,对于 GNUstep 来说,make 文件名必须是“GNUmakefile”,内容如下:include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME=HelloWorld<strong>
</strong>HelloWorld_OBJC_FILES=HelloWorld.m
include $(GNUSTEP_MAKEFILES)/tool.make
HelloWorld 关键字部分为可替换为实际内容。GNUmakefile 文件要求与 .m 文件在同一目录下。
make 的执行很简单,进入 “GNUmakefile” 所在的目录,在 Shell 窗口中执行 “make” 即可。这会在 “GNUmakefile” 所在目录下生成一个 obj 目录,obj 下包含了可执行文件和目标文件等。
后记简简单单,基本上没什么波折,就是工作路径的问题烦了我一下,因为有人说在 GNUstep 安装目录下会有一个 “C:\GNUstep\home\username” 目录,可我安装后并没有类似的东东,也许是版本不一致或是别的什么原因吧,这已经不是问题了。
注:上面的问题是这样的,后来我发现这个 HOME 还是有的,启动 shell 后,输入 pwd 命令,得到当前工作路径为 /home/username,实际位置位于 “D:\GNUstep\msys\1.0\home\username”。
② Xcode编译后怎样自动在终端运行,在学习写OC的控制台程序,因为在Xcode编译后默认打开Xco
③ 新手求问 mac下 终端如何编译OC
建议用xcode开发软件
④ OC学习篇之@class关键字的作用以及#include和#import的区别
#import比起#include的好处就是不会引起交叉编译
在 Objective-C中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import
确定一个文件只能被导入一次,这使你在递归包含中不会出现问题
@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import
@class就是告诉编译器有这么一个类,至于类的定义是啥不知道
@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import
“”的意思是自己创建的文件,用这个首先会在当前的目录中寻找,如果找不到就到其他的位置寻找,“”和<是相对的一个是自己创建的文件一个是系统的文件
⑤ OC 中 #import在.h 和 .m中的作用分别是什么
.h是向“外界”提供接口,.m是用来实现.h中声明的方法和一些私有的方法。.m是参与编译的,对于其他文件来说,你给给我一个.h告诉我你有什么方法可以用就可以了,我不管你是如何实现的,所以不用引入.m,而且引入.m会报错
⑥ swift中的的oc代码无法编译怎么办
方法一:在swift项目中,新建一个oc的类,这时候,会弹出一个对话框,你点默认的那个选项就行了。然后在新生成的桥文件中导入你所需要的oc代码的头文件就行了。
方法二:但是有时候,新建一个oc的类,xcode并没有提示让创建桥文件,这时候就需要自己手动创建了。new一个header文件,命名为当前的项目名称就行,然后删除这个桥文件里默认生成的这些东西,并且在oc bridging header中设置路径就行了。
⑦ 为什么oc的编译速度比java快很多呢
因为oc是用了llvm和gcc还有一系列工具链;Java要解决各种依赖包,资源管理,id连接,进行dex转换。
其实oc的第一次编译也不是很快,只是如果第一次编译之后,以后迭代开发,改几个文件的话,那么再次编译很快。原因是:oc是消息型语言。
⑧ ios oc和swift混编怎样调用swift方法
引用头文件 #import "项目名字-Swift.h" 将项目名字 替换成你项目的名字,Swift 就可以再oc中使用了,语法还是oc语法!
⑨ 有谁在windows下用OC的编译器成功的么
安装GNUstep,提供了Windows平台下的Object-C的模拟开发环境,一共有四个软件包,其中GNUstep System和GNUstep Core是必装的,GNUstep Devel和Cairo Backend是选装的。只安装前两个就够了。
⑩ ios oc工程引入swift header没有
在项目中右键添加一个swift文件,我添加的LearnSwift.swift
添加后Xcode弹出‘是否配置oc桥接头文件’的提示,点确认,系统自动生成一个项目名-Bridging-Header.h的文件,我的是LearnSwift-Bridging-Header.h。
配置oc桥接头文件的提示
LearnSwift-Bridging-Header.h实质上是一个供swift使用的头文件,在这里把所有要暴露给swift的oc头文件都添加进去,这样写swift的时候就可以直接使用那些oc的类和方法了。
因为swift本身没有头文件,只有.swift;而oc有.h和.m文件。有了这个声明,.swift就可以直接使用oc的.h了
我的LearnSwift-Bridging-Header.h文件内容
接下来就可以直接在LearnSwift.swift中写swift代码啦 ~ 随便声明一个类,打些log:
我的LearnSwift.swift文件内容
编译直接通过,这就是在swift中使用oc类和方法了,一切顺利!
在oc中使用swift,我在AppDelegate.m中使用刚才创建的swift类,那么先要引用swift头文件,即#import "LearnSwift-Swift.h",然后在这个.m文件中就可以任意使用swift创建的类和方法了:
LearnSwift *learnSwift = [[LearnSwift alloc] init];
[learnSwift logsth:@"code from oc"];
编译运行直接过! 输出:
this is a log from swift : code from oc
理解下#import "LearnSwift-Swift.h"
其实是项目名-Swift.h,这也是Xcode自动生成的,根据你写的所有swift代码,生成一个oc的.h文件,进行类和方法的声明,这样在oc里引用这个头文件后,就相当于引用了所有swift声明,可以直接使用了。