【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> 比较
5、C语言的源文件拓展名为".c",OC的源文件拓展名为".m"
main.m文件是我们这个程序中的唯一一个源文件
编译器会将.m文件编译为.o目标文件,比如main.m编译成功后会变成main.o文件
二、 解析OC内部的代码
查看项目结构可以发现这个程序中只有一个源文件:main.m
跟C语言一样,OC的入口点依然是main函数。在main.m里面第三行就已经定义了一个main函数。
2> NSLog();输出的结果是
***OC一个很特殊的就是:NSLog()输出完毕后自动换行。
3>
NSLog也可以像C语言的printf函数一样支持格式符
*、%f表示接收浮点数据,%.2f表示保留二位小数。 (这些常见的知识点其实与C语言是类似的)
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 这是 //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
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
相关文章推荐
- c# cook book -Linq 关于Object的比较
- JSONObject与JSONArray的使用
- Objective-c中ARC技术详解(转)
- Objective-C ---KVO内部实现原理
- Github上优秀的Objective-C项目简介
- Objective-C 单例模式
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式
- objective-c连接MySQL数据库
- Objective-C(五、@class,id类型,类对象构造方法,加载和初始化,description,Logging宏)——iOS开发基础
- NSArray、NSMutableArray基本用法
- Objective-C 快速入门--基础(二)
- Objective-C 快速入门--基础(二)
- Gson is a Java library that can be used to convert Java Objects into their JSON representation.
- 黑马程序员——Objective-C语言知识整理——类方法与对象方法
- 黑马程序员——Objective-C语言知识整理——封装、继承与多态
- js window.open打开新窗口原页面出现[object window]解决办法
- 黑马程序员——Objective-C语言知识整理——类与对象基本知识
- Objective-C总Runtime的那点事儿(一)消息机制
- Objective-C 消息转发 与NSObject中forwardInvocation消息重定向
- OGNL:Object Graph Navigation Language(对象图导航语言)