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

从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开发不是难事,为自己加油吧!

你可能感兴趣的:(从Android到iOS开发,从Android到iOS开发)