01-Objective-C

时间:2023-03-09 17:31:32
01-Objective-C
前言
目 前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++ 可用于图形处理。近来,流传Ruby、C#也可以开发iOS应用程序了,甚至还说Ruby比OC更适合写iOS程序。这让不少学习iOS开发的朋友感到很 困扰,究竟学哪门语言好呢?OC会不会被Ruby、C#取代呢?如果被取代了,那我的OC不是白学了?下面我发表一下个人观点:
1> Ruby、C#也能做iOS开发,我觉得这也不算什么坏事,能让更多领域的人投入iOS开发,汇集更多程序猿的智慧,多创造一些让人眼前一亮、有划时代意义的app,进而丰富AppStore、促进iOS的发展、造福消费者。
2> OC这门语言一直由苹果公司在维护,苹果当初选择OC作为iOS的开发语言,肯定是有理由的,这也说明了苹果对OC的肯定。从iPhone的成功也可以看出,苹果选择OC是对的。因此,我觉得OC被其他语言取代是不太可能的。
3> 退一万步讲,假如OC真的被Ruby它们取代了,我觉得这对经验丰富的OC开发者来说,并不是什么致命的打击。不可能因为OC被淘汰了,广大OC开发者就 没办法在软件行业混下去了。OC作为一门面向对象的语言,它的编程思想跟其他面向对象的语言都是差不多的,只不过语法特性不同。因此,你学了OC之后绝对 不会吃亏,以后想学习其他语言也是非常快的,因为思想是一样的。比如之前你一直都开着丰田车,某一天丰田倒闭了,你的车子也烂了,难道给你一辆宝马,你就 不会开了么?
4> 因此,我还是建议想学习iOS开发的朋友们,沉下心来好好学习OC吧!
一.简介
1.基于C语言
C语言是一门面向过程的语言,OC 是在C语言的基础上,增加了一层最小的面向对象语法,为什么说是最小的面向对象语法呢?因为OC把一些比较复杂的面向对象语法都去掉了,剩下的都是面向对 象的精华,因此OC是一门面向对象的语言,而且会比C++简单很多。因为OC是基于C语言的,所以完全兼容C语言,也就是说我们在开发iOS程序过程中, 可以在OC代码中混入C语言代码,甚至是C++代码
2.作用

我们可以使用OC开发Mac OS X平台和iOS平台的应用程序。

这里简单说明一下Mac OS X和iOS:

  • Mac OS X是苹果公司为Mac系列产品开发的专属操作系统,目前搭载这款操作系统的设备有:MacBook、iMac、Mac mini
  • iOS是由苹果公司开发的手持设备操作系统,目前搭载这款操作系统的设备有:iPhone、iPad、iPod touch、iPad mini
二.语法预览
1.没有包名(命名空间)的概念
在Java中,为了防止两个类名相同的类冲突,你可以将这2个类放在不同的包里面。OC中并没有"包"的概念,也就是没有命名空间机制,取而代之的是开发人员给类名加上前缀,使用前缀可以有效的防止类名冲突。比如NSString(OC中的字符串类)、NSArray(OC的数组类),它们的前缀都是NS
2.关键字都以@开头
1> 我在前面说到,OC代码中是可以混入C语言、C++代码的,而C语言和C++作为一门编程语言,都有自己的关键字。为了防止跟C语言、C++关键字冲突,OC的关键字都以@开头。
下面列举一些常见的关键字
@interface,@implementation,@end @public、@protected、@private,@selector @try、@catch、@throw、@finally @protocol,@class
OC 2.0中引入的新关键字有
@property,@synthesize @optional,@required,@dynamic
2> 甚至字符串都是以@开头的,比如@"Hello"是OC中的字符串,而"Hello"则是C语言中的字符串。
三.什么是iOS开发
iOS是由苹果公司开发手持设备操作系统,目前搭载这款操作系统的设备有:iPhone、iPad、iPod touch、iPad mini。也就是说,学习了iOS开发,就可以编写运行在iPhone上的应用程序。
 
 
四.学习iOS开发的准备工作
1.Objective-C
大家都知道,应用程序的开发都要用到编程语言,比如用Java开发android程序,而iOS开发的核心语言是Objective-C。因此,要想学习iOS开发,就必须先学习Objective-C这门语言。
2.Xcode
我们要掌握一门编程语言的话,都必须使用相应的开发工具进行学习和调试,比如用eclipse学习Java。至于Objective-C,我们可以使用苹果公司提供的开发工具---Xcode。
3.Max OS X

* Xcode没有Windows版本的,只有Mac版本的,也就是只能跑在Mac OS X系统上。因此,你要先拥有Mac OS X系统才能使用Xcode进行Objective-C的学习和iOS开发。

* Mac OS X是苹果公司为Mac系列产品开发的专属操作系统,目前搭载这款操作系统的设备有:MacBook、iMac、Mac mini。

* 大概有3种途径可以获取Mac OS X系统:虚拟机、黑苹果、购买苹果设备。

1> 虚拟机

相信计算机人士都知道什么是虚拟机了。这里的虚拟机就是说在你的Windows系统上面模拟Mac OS X的环境,把Mac OS X系统运行起来,一般可以使用VMWare这个软件实现。

优点:零成本。只要你在Windows上装好VMWare,下载个Mac OS X的镜像文件,再通过VMWare安装Mac OS X系统即可。

缺点:运行速度慢、对机器性能要求高、有兼容性问题。因为你的机器要同时跑两个系统:是在运行Windows的基础上运行Mac OS X,因此,慢是必然的。

2> 黑苹果

黑苹果就是直接在你的PC机上,像安装XP或Win7一样安装一个Mac OS X系统,装好之后开机选择启动Mac OS X系统即可。这跟虚拟机是有本质区别的:虚拟机是同时跑两个系统,黑苹果只是跑一个系统。

优点:零成本,运行速度快。只要你有Mac OS X的镜像文件。当然,你要会装系统才行。

缺点:安装难度大,并不是所有的PC机都能顺利安装Mac OS X,因为苹果当初设计这款操作系统,是专门给Mac系列产品使用的。当然,也会有兼容性问题。不过,只是用作学习iOS开发的话,就已经足够了。

3> 购买苹果设备
苹果的设备默认就是支持Mac OS X的,不过价格都比较昂贵,动不动就可能上万了。在苹果设备里面,又可以分3种:
1) iMac:传说中的一体机,一般都是上万RMB的。
2) MacBook:苹果笔记本,它分MacBook Pro和Mac Book Air,做开发最好选择Pro,Air纯属装B人士使用(开玩笑)。Pro的价格至少7K。
3) Mac mini:月饼盒这么大的主机。它只是个主机,显示器自己买一个杂牌就行了。

优点:运行速度快,无兼容性问题。

缺点:成本高。

最后说一下个人建议:如果经济条件好的话,直接买苹果设备就行了,比如MacBook Pro;如果经济条件有限,装个黑苹果或者去淘宝买个黑苹果主机,也才2-3k。

4.调试设备(可选)
Xcode自带了iOS模拟器功能,因此我们可以将开发好的应用程序,运行到模拟器上进行测试,不一定要买iPhone\iPad进行调试。当然,真机和模拟器肯定是区别的,因此在发布应用程序之前肯定要进行真机测试。
5.开发者证书(可选)
如果你是想把开发好的iOS程序发布到App Store上去卖,或者把程序运行到真机(iPhone\iPad)上,那么就必须有iOS个人开发者证书。这个需要向苹果买,一年99$。如果纯粹是学习,不用买这个证书,一切开发都是免费的。
五.iOS开发的学习难度如何
苹果提供的API非常强大,用简单几句代码就可以实现非常炫酷的效果,可以说苹果很为开发者着想。对比android,我个人觉得iOS会容易一些。
* 用我和周边朋友的经历来说:如果你有过其他语言的开发经验,而且能一心一意学习iOS、不走弯路,在半个月内上手iOS开发是完全没有问题的。
六.第一个OC程序
1.打开Xcode,新建Xcode项目
01-Objective-C
 
2.选择最简单的命令行项目
01-Objective-C
因为我们只是学习OC语法,还未正式进入iOS开发,所以选择命令行项目即可
3.输入项目名称,选择Foundation框架进行创建项目
01-Objective-C
Language选择Objective-C
4.点击Run,运行项目
01-Objective-C

* C语言的源文件拓展名为".c",OC的源文件拓展名为".m"

* main.m文件是我们这个程序中的唯一一个源文件

* 编译器会将.m文件编译为.o目标文件,比如main.m编译成功后会变成main.o文件

* 运行结果为

01-Objective-C
七.第一个OC程序解析
1.程序的入口:main函数
2.@autoreleasepool
在Java中,有垃圾回收机制,系统会自动回收不再使用的对象;而OC是不支持垃圾回收的,需要开发人员编写代码来释放对象所占用的内存。在第6行有个@autoreleasepool{},这是跟内存管理有关的,暂时不用理解它的意思,你只需要记住:以后的OC代码都写在@autoreleasepool的{}内部。
3.NSLog
1> 第14行的NSLog是一个日志输出函数,它可以将传入的OC字符串参数输出到控制台上。
2> 函数参数@"Hello, Wolrd!"是一个OC字符串,并不是C语言字符串,所有OC字符串的前面都有个@。
3> 第14行代码NSLog(@"Hello, World!");的输出结果是:
01-Objective-C

红框左边的信息是NSLog自动加上去的,比如日志输出时间、项目名称等。而且NSLog输出完毕后自动换行。

4.#import
1> #import是一个预处理指令,作用跟C语言的#include类似,都是 包含(拷贝)某个文件的内容 到 预处理指令所在的位置。
2> 第9行的#import <Foundation/Foundation.h>表示包含Foundation框架中的Foundation.h文件。
1) Foundation框架中包含了很多常用的类和函数,比如字符串处理类NSString、日志输出函数NSLog。它的重要程度相当于Java中的java.lang.*
2> .h称为头文件,一般用来声明一些函数,想要使用这些函数,就必须用#include包含函数所在的头文件。我们在第14行中使用的NSLog函数存在于Foundation.h文件中,因此要先包含Foundation.h文件才能使用NSLog函数。就好像在Java中,你用import关键字引入 一个类后才能正常使用这个类。
3> 在C\C++中,我们用#include来包含头文件,缺点就是同一个头文件可能被包含多次。为了解决这个问题,一般会这样写头文件:
#ifndef _TEST_H_
#define _TEST_H_

/*.....*/

#endif

我们在OC中,就使用#import来包含头文件,优点是可以自动防止同一个头文件被包含多次。

5> #import <...>表示包含系统自带的文件,#import "..."表示包含开发人员自己创建的文件