概述
1、Cocoa是什么?Cocoa是使用OC语言编写的工具包,里面有大量的类库、结构体,说白了其实就相当于java中的标准API、C++中的标准库。OC中没有命名空间的概念,所以使用加前缀来防止命名冲突,因此你会看到大量的以NS
2、Cocoa框架由Foundation
3、static
4、@语法是OC特有的一种语法,C是没有的。
5、OC中只有类的成员变量才有访问权限控制,@public、@protected、@private,默认是@protected,类变量、类方法、成员方法是没有访问修饰符的,所有的方法都是public的,所有的类变量都是私有的。
6、OC中的类方法只能类调用,如果使用对象调用就会报错,而java这只是一个警告而已。
7、OC中定义类的@interface和java中的interface不是一回事,OC的@protocol和java中的interface才是一码事。@interface跟java和C++
8、get为前缀的方法在OC中有特殊的意义,所以尽量使用成员变量名称来作为getter方法的函数名。
9、OC是动态语言,所以即便是@interface中没有定义的方法在.m文件中实现了也是OK的,一般我们都是给别人提供头文件,这种情况就相当于把方法变相的私有化了,对于我这种喜欢在写代码过程中随时加方法但又不想动头文件的人来说还是比较爽的。
10、在OC中所有对象的存取都是用指针,C++中还有引用,OC中没有,我宁愿你强迫我使用一种方法,也不愿你提供给我两种方法我却不知道使用哪一种方法的好。
11、OC的方法定义和调用算是一大“特色”:
方法的定义:-(返回类型)
[类或者实例的指针方法名:
为了好看,第一个参数一般不加标签名,当然,标签名都可以隐藏的,但不建议这样做,因为当你接手了一个离职的人程序,其中的JAVA
12、调用类方法:
[Fraction
[[Fraction
Class
class
clazz
惯,这就和JAVA
获取Class
[类或者对象
[类或者对象
NSClassFromString(类名的字符串形式)
你也可以通过如下的函数把Class
NSStringFromClass(Class)
13、OC中自定义类最好显示继承NSObject,可以获得alloc、init、release等方法。
14、OC中使用nil表示null,但跟java中的null还是有区别的,java中调用null的方法,会报臭名昭著的空指针异常,而OC不会,所以在OC你不必再为空指针而烦恼。
15、Cocoa中提供的很多函数和java中的api有很大的不一样,java是纯面向对象的,所有的方法都必须在类中定义,但OC是兼容C语言的,所以C中的面向过程思想在OC中也是行得通的,因此Cocoa中很多东西都不是对象,而是C语言的函数、结构体,比如NSLog()。
16、对象的初始化
前面我们看到实例化对象最多的方法是:Fraction
这跟java不一样,java对象创建只需要new一下,同时调用构造方法(实际上虚拟机层面分为两个步骤:new对象,执行<init>方法(包含构造方法)),但是OC中分为两步:分配内存(同时给变量赋初值)、初始化。
(1)、alloc
(2)、init这个方法是从NSObject继承而来的,你可以覆盖它,当然init不是构造方法,只是一个普通方法而已,你甚至可以换成其他方法,只不过我们习惯在方法名前缀加上init。
还记得java中的构造方法没有返回值吧,所以为了达到java这种效果:Test
17、NSObject中的description方法相当于java中Object的toString方法,,用于获取对象的字符串表示。唯一不同的是OC中需要使用格式化字符串%@,才会触发description被调用:
Fraction
NSLog(@"%@",frac);
18、Objective-C
@try
总体来说,OC中的异常体系和java中的异常体系差不多,唯一的差别就是java中有业务异常,意思就是说你必须捕获他,如果不捕获就会出现编译错误,OC中的异常基本上都属于java中的运行时异常,如果你没有捕获,发生了异常程序就会崩溃,在一些循环批任务中尤其要注意。
18、OC中还有一个特色那就是他的弱类型id,他可以表示任何对象,实际上应该是利用了指针地址的通用性,由于OC中操作对象都必须是指针,而指针本身又是一串地址,所以通过指针可以指向一切不同的对象。
19、继承(感觉和java差不多啊)
20、反射(这个和异常一样,感觉跟java也很像)
21、选择器(其实就是C中的函数指针,以及java中的Method类)
22、类别(Category),扩充类的功能,但不可以声明新的成员变量。
类别的应用比较广泛,譬如:第三方的Objective-C
23、协议@protocol,这个就是前面说的,相当于java中的interface,思想都是一种约定、规范,只是具体语法不一样罢了。
24、终于到了内存管理了,擦,没怎么看懂,要好好找个专题弄懂。
25、字符串
-(BOOL)
比较两个字符串是否相等,与JAVA
-(NSMutableString*)
这与JAVA
26、数组
Cocoa
NSArray
从这个类方法arrayWithObjects
NSMutableArray
NSMutableArray
[mArray
NSEnumerator
for(NSString
NSLog(@"%@",ms);
}
//for-each
27、字典(哈希表)
NSDictionary
NSDictionary
NSLog(@"%@",[dic
同样的有NSMutableDictionary
NSMutableDictionary
[mDic
for(id
NSLog(@"%@
}
//快速迭代的for-each
28、哈希Set
NSSet
-
-
这与JAVA
同样的,NSMutableSet
29、封装类(相当于java的包装器)
前面的几个容器类的对象都不能存放基本数据结构、enum、struct、nil,怎么办呢?在JAVA中我们知道所有的基本数据类型都有对应的封装类,例如:int---Integer、boolean---Boolean,使用封装类可以把基本数据类型包装为对象,而封装类本身又有方法可以返回原来的基本数据类型。Cocoa
NSRect
NSValue
/ alueWithBytes
//objCType
NSMutableArray
[mArray
NSRect
[[mArray
//NSValue
//一般Cocoa
对于基本数据类型,你可以使用简便的NSNumber
如果你想存储空值到集合类,可以使用NSNull,它使用NSNull
30、日期类型
Cocoa
31、数据缓冲区(其实就是java中的字节数组)
Cocoa
NSData
32、写入和读取属性(简直就是java序列化和反序列化的翻版)
在iPhone
这几个类型都有一个成员方法writeToFile:
如果你要持久化的类型不是上述的数组、字典、缓冲区,那该怎么办呢?Objective-C
-(void)
-(id)
第一个方法相当于编码对象,第二个方法是解码回对象,也就相当于给类型定义了一个新的init
33、对象的复制
对象的复制就相当于JAVA
Objective-C
34、多线程
Objective-C
Objective-C
另外,Objective-C
@synchronized(要加锁的对象){
//同步执行的代码
}
另外比较有趣的是,如果你想更新UI
-
如果你对java的swing熟悉的话,你应该知道在UI界,大多数更新界面的都必须在一个单线程中执行,因为如果更新界面是多线程的话会很难处理的,java
Objective-C
跟java一样,如果线程池可以满足你的业务需求,尽量使用线程池,而不是原始的NSThread,因为使用线程池屏蔽了许多线程自身需要处理的问题,代码也更加简洁。
35、KVC
KVC
KVC
KVO就是NSKeyValueObserving的缩写,它也是Foundation
36、谓词NSPredicate
Cocoa
---------------如若转载:请标明出处,谢谢您对本人的尊重!
阅读
(1910)
┊
评论
(2)
┊
收藏
(1)
┊
转载
(6)
┊
喜欢
▼
┊
打印
┊
举报
已投稿到: |
排行榜
|
---|
前一篇:
Xcode4.5出现时的OC新语法
后一篇:
设置隐藏导航栏返回按钮
评论
重要提示:警惕虚假中奖信息
[发评论]
-
很赞啊
发评论
id="postCommentIframe" frameborder="0" src="http://blog.sina.com.cn/main_v5/ria/blank2.html" style="border: 1px solid rgb(199, 199, 199); height: 158px; width: 448px; background-color: white;">
验证码: 请点击后输入验证码 收听验证码
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。
< 前一篇
Xcode4.5出现时的OC新语法
后一篇 >
设置隐藏导航栏返回按钮
最后
以上就是沉静铃铛为你收集整理的java 与oc之间的比较的全部内容,希望文章能够帮你解决java 与oc之间的比较所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复