java(android)和oc(ios)比较

来源:互联网 发布:淘宝刷天龙八部vip帐号 编辑:程序博客网 时间:2024/05/22 13:10

1. Cocoa是什么?Cocoa是使用OC语言编写的工具包,里面有大量的类库、结构体,说白了其实就相当于java中的标准API、C++中的标准库。OC中没有命名空间的概念,所以使用加前缀来防止命名冲突,因此你会看到大量的以NS 为前缀的类名、结构体、枚举 

2. Cocoa框架由Foundation Kit、App Kit两部分组成,前者是基础工具库,后者主要是UI库、高级对象等。iOS和安卓都可以使用第三方类库.a,.framework,.so...

3. static  类变量只能本类访问,除非提供类方法给外部访问这个类变量。

4. OC中只有类的成员变量才有访问权限控制 ,@public、@protected、@private,默认是@protected,类变量、类方法、成员方法是没有访问修饰符的,  所有的方法都是public的,所有的类变量都是私有的。

java:static:修饰变量,称为类变量或静态变量。静态变量是和类存在一起的,每个实例共享这个静态变量,在类加载时初始化。

final:被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取不能更改。修饰类是不能派生出子类,修饰方法时,不能被当前子类的方法覆盖。

abstract:不能创建abstract 类的实例。一般被继承,实现抽象方法。类只要有一个abstract方法,类就必须定义为abstract,但abstract类不一定非要保护abstract方法不可。

5. android static方法(ios的+方法)

    static方法可以直接通过类名调用,任何的实例也都可以调用,因此static方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
    static方法只能访问static的变量和方法,因为非static的变量和方法是需要创建一个对象才能访问的,而static的变量/方法不需要创建任何对象。
6. OC中定义类的  @interface 和java中的interface不是一回事,OC的@protocol和java中的interface才是一码事。@interface跟java和C++ class关键字差不多,在OC和C++中,都习惯将类定义写在头文件里,而java却根本没有头文件的概念,
7. oc的通知(notice)与android的广播,都是可以一对多的方式响应,安卓可以多个程序之间通讯
8.oc的运行时和android的反射,都可以实现的功能:获取类信息、属性设置获取、类的动态加载(NSClassFromString(@“className”))、方法的动态调用
9.OC中使用nil表示null ,但跟java中的null还是有区别的,java中调用null的方法,会报臭名昭著的空指针异常,而OC不会,所以在OC你不必再为空指针而烦恼。
10.Cocoa中提供的很多函数和java中的api有很大的不一样,  java是纯面向对象的,所有的方法都必须在类中定义,但OC是兼容C语言的,所以C中的面向过程思想在OC中也是行得通的,因此Cocoa中很多东西都不是对象,而是C语言的函数、结构体,比如NSLog()
11.Objective-C的异常都继承自NSException,当然NSException 本身也继承自NSObject。总体来说,OC中的异常体系和java中的异常体系差不多,唯一的差别就是java中有业务异常,意思就是说你必须捕获他,如果不捕获就会出现编译错误,  OC中的异常基本上都属于java中的运行时异常 ,如果你没有捕获,发生了异常程序就会崩溃,在一些循环批任务中尤其要注意
12.OC中还有一个特色那就是他的  弱类型id,他可以表示任何对象 ,实际上应该是利用了指针地址的通用性,由于OC中操作对象都必须是指针,而指针本身又是一串地址,所以通过指针可以指向一切不同的对象。
13.oc的block就是java中匿名内部类,而匿名内部类的好处是代码更清晰
14.oc的字典和数组对应android的map和list
15.oc的NSCoding对应android的Serializable,序列化
16.多线程,@synchronized,runable,handle,postmessage,performselectoronmainthread,待续.