OC学习第1天——hello world

很多人为了学习ios开发而买了mac,而我却正好相反——买了mac后觉得只拿来看看网页、管理服务器什么的太浪费了,就顺便把ios开发也学学吧。由于本人是oc初学者,若有错误的地方还请指正。本文使用os x 10.10.2以及xcode 6.1.1。

这里首先面临的就是语言的选择——oc和swift。经过“深思熟虑”我还是选择了oc,因为相关的资料比较多,遇到问题google起来效果较好。很多人觉得ios开发很难学是因为oc——别的不敢讲,就我这两天的学习来看,oc虽说是c的超集,不过语法看起来题确实挺奇怪,但对于任何有其他语言开发基础的人来说,语法仅仅是一个需要习惯的过程。ios开发的真正难点在于cocos引擎部分,所以对于英语好的来说swift也是不错的选择(英语硬伤还是啊……)。

直接从appstore中安装xcode,安装完成后运行选择“create a new Xcode project”,再选择os x列表下的“application”,然后在右边的窗口中选择“command line tool”,点击“next”后输入项目名称等相关信息,语言选择“Objective-c”,再选择保存位置后点击“finish”即可。

点击左边列表的main.m文件就是程序自动生成的模版文件了,代码如下

#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

这个像c语言又不是c语言的家伙就是oc了,又感觉有些python影子,比如引入头文件的语法变成了import,释放内存池的语法@autoreleasepool和python的装饰器语法、功能相似等。虽然oc也是用.h做头文件后缀,不过却用.m做代码文件后缀。

第一行的Foundation/Foundation.h作用类似stdio.h或iostream,定义了很多核心函数在里面,比如NSLog,这个函数功能就是输出,和printf一样,不过里面那个@又是神马东东呢?

这里就要引出oc中的一个新类型——NSString,字符串。动态构建NSString有2种方法:

        NSString *str = @"is a number";
        NSLog(@"%d  %@",1,str);
        NSString *str1 = [[NSString alloc] initWithFormat:@"%d + %d = %s",1,2,"3"];
        NSLog(@"%@",str1);
        //[str1 release];

由于oc中内存都是在堆上分配的,所以返回的都是指针(至于原因这里先留个坑,我也没太深究),注意占位符和%d、%s类似,不过变成了“%@”代表这是个NSString类型(换言之@是否就是代表这个类型呢?)。第三行的alloc作用和c中的malloc一样,分配内存的。大小为NSString类型大小,并且用后面的参数进行格式化。

这里可能还有个疑问,那个[]又是神马意思呢?难道是python的列表?据目前所学知识,[]是oc中调用函数的方式,这个在后面的学习应该还会遇到。

最后一行又是神马意思呢?为什么又注释呢?从字面意思来看,明显和内存释放有关。不过由于最新版的xcode默认开启了arc,所以在这种情况下写这句代码会报错。不过在之前的某些版本中,如果关闭了arc则申请了内存后一定记得释放。