设为首页 加入收藏

TOP

iOS,java语法对比(一)
2014-11-24 01:45:14 来源: 作者: 【 】 浏览:0
Tags:iOS java 语法 对比
很多想开发iOS,或者正在开发iOS的程序员以前都做过Java或者C++,当第一次看到Objective-C的代码时都会头疼,Objective-C的代码在语法上和Java, C++有着很大的区别,有的同学会感觉像是看天书一样。不过,语言都是相通的,有很多共性。下面列出Objective-C语言的语法和Java,C++的对比,这样你就会很容易Objective-C的语法是怎么回事了。先目睹一下Objective-C头文件和实现文件里都有什么:头文件:

\

实现文件, 类似于C++的.cpp文件:

\

一、函数的对比

helloworld方法
Java 语言:

[cpp] view plaincopy
  1. public void helloWorld(bool ishelloworld) {
  2. //干点啥
  3. } C++语言:
    [cpp] view plaincopy
    1. void helloWorld(bool ishelloworld) {
    2. //干点啥
    3. } Objective-C语言
      [cpp] view plaincopy
      1. -(void) HelloWorld:(BOOL)ishelloworld{
      2. //干点啥
      3. }

        前面带有减号(-) 的方法为实例方法,必须使用类的实例才可以调用的。对应的有+号, 代表是类的静态方法,不需要实例化即可调用。

        二、消息。
        消息的定义:向对象发送信息。
        消息是ios的运行时环境特有的机制。 和C++,Java下的类,或实例调用类或实例的方法类似。我这说的是类似,他们的机制实际上是有很大的差别。
        例子:
        [object message]
        [cpp] view plaincopy
        1. [object message:param1 withParameter:param2]
        2. NSString *string;
        3. string = [[NSString alloc] initWithString:@"Hello"]; 上面的代码类似于:
          java/c++:object.message()
          java/c++:object.message(param1,param2)
          java/c++:
          string *str ;

          str = new string("Hello");

          三、Import
          import "Class.h
          import
          import
          这个和C++里的include ,java的import类似
          四 、Property 和Synthesize

          Property定义:@property 声明用于自动创建property属性变量的getter和setter
          Synthesize定义:@Synthesize声明实现了property属性变量的getter和setter。
          在 interface:@property dataType variableName
          在 implementation: synthesiz variableName

          四、头文件中的方法

          [cpp] view plaincopy
          1. -(returnType)method
          2. -(returnType)method:(dataType)param1
          3. -(returnType)method:(dataType)param1 withParam:(dataType)param2 类似于:
            C/C++/Java
            [cpp] view plaincopy
            1. returnType method()
            2. returnType method(param1)
            3. returnType method(param1,param2) 五、self
              指向自己的指针
              [self method]

              类似于:c++/java
              this.method();
              六、继承关系和接口实现
              例子:

              [cpp] view plaincopy
              1. ClassA:ParentA
              2. ClassA:ParentA
              3. ClassA 类似于:
                java:
                [cpp] view plaincopy
                1. ClassA extends ParentA
                2. ClassA extends ParentA implements interface
                3. ClassA implements interface

                  objective-c的 Protocol和c++、java的接口类似。

                  七、空指针

                  id obj = nil;
                  NSString *hello = nil;

                  nil相当与Java中的null;

                  八、 id

                  objective-c的和C++里的(void*)类似

                  PS:Objective-C和Java一样,都有运行时环境,有内省的能力。Objective-C和java有很多不同的地方,在iOS系统里,Objective-C的内存需要自己管理,添加了ARC机制后编译器帮助了Objective-C 添加release释放的代码。而Java是通过垃圾回收器管理内存的。

                  ---------------------

                  问题一:我在程序中看到大量的减号、中括号和NS****这种东西,他们是什么玩意儿?

                  1 减号(或者加号)

                  减号表示一个函数、或者方法、或者消息的开始,怎么说都行。

                  比如c#中,一个方法的写法可能是:

                  private void hello(bool ishello)

                  {

                  //OOXX

                  }

                  用Objective-C写出来就是

                  -(void) hello:(BOOL)ishello

                  {

                  //OOXX

                  }

                  挺好懂的吧?

                  不过在Objective-C里面没有public和private的概念,你可以认为全是public。

                  而用加号的意思就是其他函数可以直接调用这个类中的这个函数,而不用创建这个类的实例。

                  2 中括号

                  中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。

                  比如C#里你可以这么写:

                  this.hello(true);

                  在Objective-C里,就要写成:

                  [self hello:YES];

                  3 NS****

                  老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如:

                  NSLog

                  NSString

                  NSInteger

                  NSURL

                  NSImage

                  你会经常看到一些教学里面会用到:

                  NSLog (@"%d",myInt);

                  这句话主要是在console里面跟踪使用,你会在console里面看到myInt的值(在XCode里面运行的时候打开dbg窗口即可看到)。而我们在其他开发环境里面可能会比较习惯使用MessageBox这种方式进行调试。

                  你还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等,比如

                  CFStringTokenizer 这是个分词的东东

                  CALayer 这表示Core Animation的层

                  CGPoint 这表示一个点

                  UIImage 这表示iPhone里面的图片

                  CF说的是Core Foundation,CA说的是Core Animation,CG说的是Core Graphics,UI说的是iPhone的User Interface……还有很多别的,等你自己去发掘了。

                  问题二、#import、@interface这类玩意说的是什么?

                  1、#import

                  你可以把它认为是#include,一样的。但是最好用#import,记住这个就行了

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇异步图片加载、内存、磁盘缓存 下一篇基于crawler4j、jsoup、javacsv的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: