从Android到iOS开发——(1)、objective-c与java语法

对比

从6月开始,因为有iOS项目要做,就开始了iOS开发之旅,截止今天,已经做了2个项目,给我的感受是iOS开发整体要比Android简单,但是开发细节上两者却又同样的烦恼。那么要想开发iOS,那么到底选择objective-c or swift,我的建议是前者,后者可以在swift2.0和xcode7 以后大家去学习会比较好些。好了,不废话了,下面咱们来看下objective-c和java语法上的比较,希望能让java同学迅速掌握objective-c的语法,能够快速开启iOS开发之旅。


一、面向对象(OOP)

1、类

类定义

首先,回顾下java的类

public class Lei{}

下面,看看oc(objective-c的简称)的类。oc语言是扩展与c语言的,保留了.h头文件,发明了.m作为.h的实现。可以当做每个类都需要一个接口文件.h,和一个实现文件.m。比如:

Lei.h文件

////  Lei.h//  Test////  Created by zhe on 15/7/19.//  Copyright (c) 2015年 zhe. All rights reserved.//#import @interface Lei : NSObject@end

Lei.m文件

////  Lei.m//  Test////  Created by zhe on 15/7/19.//  Copyright (c) 2015年 zhe. All rights reserved.//#import "Lei.h"@implementation Lei@end

大家可能觉得java的好简单,但是如果想做iOS开发,这是必须的。再者,如果有c语言基础,那就更好了。语言是工具,我们只需要掌握工具如何使用即可。
从上面的代码片段可以看到:

@interface用来定义oc的头文件@implementation用来实现头文件定义的类

属性和方法

属性的定义可以在两个地方
1、在.h文件

@interface Lei : NSObject@property int num;@end

2、在.m文件

@interface Lei()@property int num;@end@implementation Lei@end

第一种方式,属性是public的;第二种是private的,及只能在Lei。m中访问。这两种在ViewController常常会用到。

属相的定义需要用到@property来声明.

方法定义
在头文件中定义

@interface Lei : NSObject-(void)doPlay;@end

在m文件中实现

@implementation Lei-(void)doPlay{    NSLog(@"doPlay");}@end

说到方法,简单提下‘-’表示实例方法,‘+’表示类方法。
所谓实例方法就是在任何类的实例都能访问;类方法就和java中的静态方法一样,通过类直接访问。
再看下面例子
.h

@interface Lei : NSObject-(void)doPlay;+(Lei*)shareInstance;@end

.m

@implementation Lei-(void)doPlay{    NSLog(@"doPlay");}+(Lei*)shareInstance{    return [Lei new];}@end

其他,对于属性的设置,oc中会自动封装getter和setter,比如上面的num

//设置num[self setNum:8];//获取num[self num];或者self.num;

self 指的是当前类的自身指针。

2、继承

集成就很简单了,java使用extends关键字来定义。而oc使用冒号表示继承关系。
继承的好处我就不用多说了。

3、接口

说道接口,java使用interface来定义接口。但是通过上面类的学习,大家知道@interface已经用来声明类。那么oc中还有没有接口这个东西呢?答案是没有了,但是换了一种称为委托(delegate)。
大家都知道接口常常用来作为回调机制。那么委托这个概念也用于很多编程语言中,在oc中也用了这个概念。说起delegate,就不得不说protocol;这两个常常一起出现。下来我们来看看委托是怎么做的。
.h中定义

////  Lei.h//  Test////  Created by zhe on 15/7/19.//  Copyright (c) 2015年 zhe. All rights reserved.//#import @protocol LeiDelete <NSObject>-(void)setName:(NSString*)name;@end@interface Lei : NSObject@property int num;@end

上面的代码段中@protocal就是定义了一个委托。
怎么用呢?

.m中

////  Lei.m//  Test////  Created by zhe on 15/7/19.//  Copyright (c) 2015年 zhe. All rights reserved.//#import "Lei.h"@interface Lei ()<LeiDelete>@end@implementation Lei-(void)test{}-(void)setName:(NSString *)name{}@end

使用起来也和java完全不同,采用在@interface的最后用<>括起来,然后在@implementation实现方法。


二、常用类比较

语言及类型 java oc
字符串 String NSString
整型 int int或NSInteger
整型 long long或NSInteger
浮点型 float float
双精度浮点型 double double
bool boolean BOOL
集合 List NSArray或NSMutableArray
字典 Map NSDictionary或NSMutableDictionary

这些类都是常用的,具体用法还有很多区别。因为oc是基于c语言扩展的,最初对于内存的控制在类的使用中有很多规则,现在新版本的ios系统已经对于内存自动回收处理的很好了,后期在慢慢学习。学习java的同学一直对于内存回收,没有使多大劲。

三、写在最后

对于iOS开发有很多需要深究的地方,比如上面提到的常用来的用法以及注意的问题等。使用过程中稍有不慎就会掉到坑里。但是作为有开发经验的android同学,转战iOS将会是一个很好玩的过程。只要学好基础,快速进入iOS开发不是难事,为自己加油吧!

更多相关文章

  1. Android、iPhone和Java三个平台一致的加密方法
  2. Cocos2d-x从C++端调用Android端的非静态函数接口
  3. 自定义 Android 对话框 (AlertDialog) 的样式 (Android中自定义
  4. Android-自定义滑动菜单(抽屉效果)
  5. 打造Android的中文Siri语音助手(一)——小I机器人的接口

随机推荐

  1. Android(安卓)Cannas.drawTextView 方法
  2. Android(安卓)NFC 应用程序记录ARR
  3. Android中使用占位符
  4. 「1024」福利
  5. Android的垃圾回收机制(android refbase类
  6. 什么组成了Android应用程序?
  7. Android动画基础-Tween和Frame动画
  8. Android(安卓)ActionBar的源代码分析(三)
  9. Android中shape的使用
  10. Android(安卓)low memory killer 详解