很多想开发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 <Class.h>
import <director/Class.h>
这个和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<Protocol>
  3. ClassA <Protocol>

类似于:
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是通过垃圾回收器管理内存的。

转载于:https://www.cnblogs.com/kenshinobiy/p/4959639.html

快速让你明白Objective-C的语法(和Java、C++对比)相关推荐

  1. Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO

    Java基础知识第二讲(Java编程规范/JVM/集合框架/异常体系/Java反射/语法知识/Java IO/码出高效) 分享在java学习及工作中,常使用的一些基础知识,本文从JVM出发,讲解了JV ...

  2. 打怪升级之小白的大数据之旅(一)<Java基础语法之Java的身世之谜>

    打怪升级之小白的大数据之旅(一) Java基础语法之Java的身世之谜 打怪升级之小白的大数据之旅(一) 前言 一.学习大数据之前 二.Java基础 what? why? how? 总结 前言 做了几 ...

  3. lambda表达式语法_使用类似Lambda的语法作为Java中的表达式进行切换

    lambda表达式语法 从Java 14开始, switch表达式具有其他Lambda式 ( case ... -> labels )语法,它不仅可以用作语句,还可以用作计算为单个值的表达式. ...

  4. java 静态对象语法_04.Java 语法

    计算机基础知识 表达式(expression):Java中最基本的一个运算.比如一个加法运算表达式.1+2是一个表达式,a+b也是. 计算机内存的最小存储单元是字节(byte),一个字节就是一个8位二 ...

  5. Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释

    这里写目录标题 Java简介 Java发展历程 Java语言平台版本 Java语言的特点 Java语言跨平台原理--JVM JRE和JDK JDK安装路径下的目录解释 Java基础语法 Java标识符 ...

  6. 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(十五)——JSP基础语法   任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语

    javaweb学习总结(十五)--JSP基础语法 任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. ...

  7. C#的进化——C#发展史、C#1.0-10.0语法系统性梳理、C#与JAVA的对比

    C#的进化 C#发展史.C#1.0-10.0语法系统性梳理.C#与JAVA的对比 前言 C#也使用了十年有余了. 一路走来,见证了微软从封闭走向开放,从平台捆绑,到成为活跃于Github的重要贡献者. ...

  8. lsdyna如何设置set中的node_list_如何快速掌握es6+新特性及核心语法?

    国庆刚刚结束,我们开始一波新的学习进程吧. ECMAScript 6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了.作为前端必备技能,我们来快速开始吧 接 ...

  9. 一文快速掌握 es6+新特性及核心语法

    首先先祝各位节日快乐,好好去体验生活的快乐,在假期最后一天里,祝大家收获满满,同时抓住假期的尾巴,收割实用技能. 接下来我会总结一些工作中常用也比较核心的es6+的语法知识,后面又要慢慢开始工作之旅了 ...

最新文章

  1. JavaScript的前世今生
  2. Which of the following statement(s) equal(s) value 1 in C programming language?
  3. php新增数组函数,php操作数组函数
  4. 一款IDEA插件神器,帮你一键转换DTO、VO、BO、PO、DO
  5. chromebook刷机_您可以购买的最好的Chromebook,2017年版
  6. 数字转字符函数_Excel之文本函数CONCATENATE/TEXT/LEFT/MID/RIGHT/FIND/LEN
  7. 《自顶向下网络设计(第3版)》——导读
  8. Spring基于IOC容器基本原理
  9. 天地图专题二:在天地图上循环显示标注点以及悬停显示信息窗口
  10. select简易的二级联动
  11. 读书笔记_量化交易如何建立自己的算法交易02
  12. pat04-树4. Root of AVL Tree (25)
  13. Laravel 生态圈
  14. 计算机配机方案和理由,配机方案
  15. 协方差、相关系数(Pearson 相关系数)
  16. 苹果蓝牙耳机平替哪个好用?商务通话蓝牙耳机推荐
  17. 购买一台计算机需要哪些配件,组装一台电脑需要哪些配件【详细列举】
  18. 关于Anaconda(Miniconda)虚拟环境中的包的问题pkgs
  19. python绘制直方图
  20. 4个易打动人的营销技巧

热门文章

  1. 靠WiFi信号就能检测呼吸跌倒!北大这项硬科技研究越来越藏不住了
  2. 语言模型“不务正业”做起目标检测,性能还比DETR、Faster R-CNN更好 | Hinton团队研究...
  3. AI进军摇滚圈,老炮:这是啥?
  4. 网易北航搞了个奇怪研究:多数人类看不懂的立体图,AI现在看懂了
  5. 清华「计图」迎来重大更新:支持热门的可微渲染,多项CV任务速度超越PyTorch...
  6. 腾讯实时音视频开发应用大赛火热开赛,两大主题、60万奖品,等你来拿!
  7. 1分钟10万字大法:量子波动速读、蒙眼翻书穿针,这是席卷15省的最新智商税...
  8. GitHub免费支持CI/CD了,开发测试部署高度自动化,支持各种语言,网友:第三方凉凉...
  9. Python 如何计算当前时间减少或增加一个月
  10. free -m 内存