一、OC概述
1、OC是一种通用的面向对象的编程语言,它扩展了ANSI C编程语言,将SmallTalk式的消息传递机制加入到ANSI C中。它是苹果的OS X(X表示第十代)和IOS操作系统,及其相关的API、Cocoa和Cocoa Touch的主要编程语言。
2、OC主要做UI界面,C语言、C++ 可用于图形处理。
3、OC基于C语言,在C语言的基础上增加了一层最小面对对象语法,可以完全兼容C语言。也就是说,可以在OC开发中混入C语言代码和C++语法。
二、语言预览
1、没有包名(命名空间)的概念
没有命名空间的概念,取而代之的是开发人员给类名加上前缀,来防止雷鸣冲突。比如,NSstring(OC中的字符串)、NSArray(OC中的数组,相当于Java中的list),前缀都是NS。
2、OC中的关键字和字符串都是以@开头。
(1)因为在OC 中可以混入C语法,C++语法,所以为了和其他语法关键字加以区分,OC的关键字都以@开头,例如:
@interface
声明类
@implementation
实现类
@protocol
声明协议
@optional
与@protocol配合使用,说明协议中的某个或者某几个方法可以不实现
@required
与@protocol配合使用,说明协议中的某个方法或者某几个方法必须实现
@end
与@interface ,@implementation,@protocol配合使用,代表声明或者实现结束
@encode
@encode为编译器宏,它可以将类型转换为相应的字符串。
这些具体怎么用,我们先不用追究,等以后我会详细的跟大家来讲。
(2)OC中的字符串也是以@开头,比如:@”Hello World!”,其中Hello World!就是我们需要的字符串。
NSLog(@"Hello World!");
三、语言比较
1、函数对比
我们先简单写一个Student方法
Java语言
public void Student (int age) {
}
C++语言
void Student(int age) {
}
OC语言
-(void) Student:(int)age{
}
2.消息传递
Objective-C使用消息传递(本质是字符串),因此方法、类和对象可以在运行时确定和修改。Java的方法是与class静态绑定的,虽然可以在运行时用反射的机制获取,但效率会下降1个数量级,只在极端的情况下使用。也就是说,前者更加动态。
//在OC语言中,消息传递
[object message:param1 withParameter:param2]
NSString *string;
string = [[NSString alloc] initWithString:@"Hello"];
3、垃圾回收
在内存管理方面Java是垃圾回收,而Objective-C是引用计数。前者发生在运行时,后者在编译期。2011的WWDC中Apple展示了最新的ARC(Automatic Reference Counting),极大减轻了程序员管理内存的负担,但其本质依然是编译期的基于引用计数的内存管理。
补充:虽然OC也可以用垃圾回收,不过使用的人很少,这也是后来ARC出现的原因吧。
4、self及this
在OC中的self 相当于Java中的this
[self method]
类似于:c++/java
this.method();
5、继承关系和接口实现
OC语言中
Student:People
ClassA:ParentA<Protocol>
ClassA <Protocol>
Java语言中
Student extends People
ClassA extends ParentA implements interface
ClassA implements interface
6、空指针
id obj = nil;
NSString *hello = nil;//nil相当与Java中的null