一 OC概述
Objective -C 是一种面向对象的计算机语言。1988 NeXT发布了Objective-C,它的开发环境和类库叫"NEXTSTEP",1994年NeXT与SUN发布了标准的NEXTSTRP系统,取名"OPENSTEP",软件自由基金会OPENSTEP版本叫GUNStep。
1996年苹果公司开始支持NeXT,把NEXTSTEP/OPENSTEP用于Mac OS X操作系统开发,它的版本和开发环境叫Cocoa,使用Objective-C作为基础语言,开发工具Xcode和Interface Builder。
2007年苹果公司推出Objective-C 2.0,Objective-C是Mac OS X的IOS开发的基础语言。
二 Objective-C的特点
1 兼容性
OC可以说是一种个面向对象的C语言,在OC的代码中可以有C和Cpp语言,它可以调用C的函数,也可以通过Cpp对象访问方法。
2 字符串
OC通常不适用C语言风格的字符串。大多数情况下是使用Foundation框架的NSString 类型的字符串。NSString类提供了字符串的类包装,支持Unicode,print风格的格 式化工具等等。它是在普通的双引号字符串前放置一个@符号。(C字符串是const char*)
<span style="white-space:pre"> </span>NSString* str1 = @"My String\n";
<span style="white-space:pre"> </span>NSString* str2 = [NSString stringWithFormat:"%@",@"String"];
3 类
OC的类声明和实现包括两部分:接口部分和实现部分
4 方法
OC中方法不再是"."运算符,而是采用"[]"运算符。这种方法调用也称为:消息发送。7
5 属性
属性是Objective-C 2.0提出的概念,它是替代对成员变量访问的“读取方法”(getter)和“设定方法”(setter)的手段,为了对类进行封装,一般情况下不直接访问成员变量,而是通过属性访问。
6 协议
OC中的协议类似于Java中的接口或Cpp的纯虚类,只有接口部分定义没有实现部分,即只有h文件没有m文件
<span style="white-space:pre"> </span>@protocol Grapgics
<span style="white-space:pre"> </span>-(viod) onDraw;
<span style="white-space:pre"> </span>@end
7 类别
OC中的类别是类似于继承机制,通过类别能够扩展父类的功能。
#import "ClassName.h"
@interface ClassName(CategoryName)
//方法声明
@end
三 编写第一个OC程序
1 使用Clang编译器
Clang是一个C Cpp Objective-C 和Objective-C++编程语言的编译器前端。
它采用了底层虚拟机(LLVM)作为后端。它的目标是提供一个GNU编译器套装(GCC)的替代品。
2 Clang 编译器指令
使用文本编辑工具编写HelloWorld.m源程序文件,在终端中采用如下指令编译:
<span style="white-space:pre"> </span>$clang -fobjc-arc -framework Foundation HelloWorld.m -o Prog1
执行编译之后的可执行文件
<span style="white-space:pre"> </span>$./Prog1
3 代码解释
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]){
@autoreleasepool{
//insert code here......
NSLog(@"Hello,World!");
}
return 0;
}
@autoreleasepool创建一个自动释放内存池,通过它来维护内存释放和回收,对象送autorelease消息后,对象引用计数马上-1,等到自动释放内存池事件周期到达后再-1,因此对象内存释放会延迟。
4 示例:字符串转换
const char* cstr = "Hello, World!";
//C->OC
NSString* nsstr = [[NSString alloc] initWithUTF8String:cstr];
NSLog(@"OC string : %@",nsstr);
//OC->C
const char* cstr2 = [nsstr UTF8String];
NSLog(@"C string : %s",cstr2);