您的位置:首页 > 移动开发 > Objective-C

【Objective-C】OC基础

2015-06-28 10:33 603 查看
一、 基础

1、 Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会配合着使用C语言、C++,OC主要负责UI界面,C语言、C++可用于图形处理。

2、OC这一门语言一直由苹果公司在维护,oc作为一门面向对象的语言,他的编程思想跟其他的面向对象的语言都是差不多的,只不过语言的特性不同。

3、C语言是一门面向对象的语言,oc是在C语言的基础上增加了一层最小的面向对象的语法,为什么说是最小的面向对象语法呢?因为OC把一些比较复杂的面向对象语法都去掉了,剩下的都是面向对象的精华,因此OC是一门面向对象的语言,而且会比C++简单很多。因为OC是基于C语言的,所以完全兼容C语言,也就是说我们在开发iOS程序过程中,可以在OC代码中混入C语言代码,甚至是C++代码。

4、语法简介:

1> 没有包名(命名空间的概念)

在Java中,为了防止两个类名相同的类冲突,你可以将这2个类放在不同的包里面。OC中并没有"包"的概念,也就是没有命名空间机制,取而代之的是开发人员给类名加上前缀,使用前缀可以有效的防止类名冲突。比如NSString(OC中的字符串类)、NSArray(OC的数组类),它们的前缀都是NS。

2> 关键字都是以@开头

oc代码中是可以混土C语言、c++代码的,而C语言和c++作为一门编程语言,都有自己的关键字,为了防止跟C语言、c++关键字冲突,oc关键字都是以@开头。

3> 比较
C语言:
输出:
printh();
printh(“nihao”);
printh(“ni de nianling is %d”, 33);

oc语言:
输出:
NSlog();
NSlog(@“nihao”);
NSlog(@“ni de nianling is %i”, 33);   //好处就是每打印完一句话就会自动换行
比较上面的可知在语法上面的一些写法oc是不同于C语言的。

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

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

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

二、 解析OC内部的代码

查看项目结构可以发现这个程序中只有一个源文件:main.m



#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}
1、程序的入口点:main函数

跟C语言一样,OC的入口点依然是main函数。在main.m里面第三行就已经定义了一个main函数。

2、@autoreleasepool

在Java中,有垃圾回收机制,系统会自动回收不再使用的对象;而OC是不支持垃圾回收的,需要开发人员编写代码来释放对象所占用的内存。在第4行有个@autoreleasepool{},这是跟内存管理有关的,需要记住:OC代码都写在@autoreleasepool的{}内部。

3、NSLog

1> 函数参数@"Hello, Wolrd!"是一个OC字符串,并不是C语言字符串,所有OC字符串的前面都有个@。

2> NSLog();输出的结果是




***OC一个很特殊的就是:NSLog()输出完毕后自动换行

3>
NSLog也可以像C语言的printf函数一样支持格式符

int age = 10;
NSLog(@"age is %i and height is %.2f", age, 1.55f);
*、%i表示接收整型数据;

*、%f表示接收浮点数据,%.2f表示保留二位小数。 (这些常见的知识点其实与C语言是类似的)

4、#import

1> #import是一个预处理指令,作用跟C语言的#include类似,都是包含(拷贝)某个文件的内容 到 预处理指令所在的位置。

2> 第1行的#import <Foundation/Foundation.h>表示包含Foundation框架中的Foundation.h文件。

Foundation框架中包含了很多常用的类和函数,比如字符串处理类NSString、日志输出函数NSLog。它的重要程度相当于Java中的java.lang.*

3>
学习C语言时候知道:.h称为头文件,一般用来声明一些函数,想要使用这些函数,就必须用#include包含函数所在的头文件(.cpp文件是具体实现在头文件中声明的函数、变量等)。上面使用的NSLog函数存在于Foundation.h文件中,因此要先包含Foundation.h文件才能使用NSLog函数。就好像在Java中,你用import关键字引入一个类后才能正常使用这个类。

4> 在C\C++中,我们用#include来包含头文件,缺点就是同一个头文件可能被包含多次。为了解决这个问题,一般会这样写头文件:

#ifndef _TEST_H_
#define _TEST_H_

/*.....*/

#endif

解析:

#ifndef 这是 //if not defined的简写是宏定义的一种,它是可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等。实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。

#define x //定义一个宏

...

#endif
//C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。

#ifndef x //先测试x是否被宏定义过
#define x
程序段1 //如果x没有被宏定义过,定义x,并编译程序段 1
#else
程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段 1。
#endif//终止if

5> 我们在OC中,就使用#import来包含头文件,优点是可以自动防止同一个头文件被包含多次。类似C/C++语言,#import
<...>表示包含系统自带的文件,#import "..."表示包含开发人员自己创建的文件

感谢M个J的博客:http://www.cnblogs.com/mjios/archive/2013/04/03/2998880.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: