Objective-C 和 Java 很像,区别在哪儿

2025-03-20 14:12:02
推荐回答(1个)
回答1:

1.类比较
objC:例如创建一个bird的类
@Interface bird{
@private int foot;
}
-(void)eat{
NSLog(@"what is the bird eat?");
}
@end
objectC是以"-"和“+”开头的类方法,-(void)eat:(id)sender{}加:是带参数的,void是eat方法的返回类型,参数的描述包含两个部分:圆括号中的参数类型以及圆括号后面的参数名。
java: class bird{
private int foot;
public void eat(){
system.out.println("what is the bird eat?");
}
}
C++:class bird{
private:int foot;
pubblic:eat();
};
与java和C++一样ObjC的类也可以继承其他类,几乎所有的类都要继承NSObject的基类,继承方法也类似于C++但public和priavte关键字不能在父类前。注意objec和java一样不能多继承。
这里java中的interface在objectC就是protocol,但是在java中可以多接口,只能单继承,这一点ObjetC和java相似。
2.实例化
在C++中创建实例:Bird *bird =new Bird();
在java中创建实例:Bird bird=new Bird();
而在objectC中则是: Bird *bird=[Bird alloc];这里的alloc是释放的bird创建实例的消息调度。
3.消息
objectC一般调用alloc的调用函数,如Bool listening =[bird isListening];
在C++中则会这样:bool listening =bird-> isListening();
在java中就会是:boolean listening =bird.isListening();
若要带参数:[bird runEvent:fly];
C++:bird->run(fly);
java:bird.runEvent(fly);
4.成员变量
在ObjectC中self就像c++和java中的this一样,ObjectC的类方法就使用self关键字。
5.内存管理
objectC不像java那样有垃圾收集器可以看管对象释放及分配内存,若objectc没有内存管理的话,就会泄露内存。因此relase就是一个内存释放器,当通过alloc函数或是以new copy 开头的函数创建NSObject的子类实例时就将计数值-1,变成0就是由1->0若没有内存管理,则计数值不会变成0.
这些是比较典型的,其实还有很多相同和不同之处。
因为objectC是c的超集。也就是可以用C来写,其实在objectc的项目中可以添加C++语法,这样的混编,文件的扩展名也就变成了.mm文件。