对比
从6月开始,因为有iOS项目要做,就开始了iOS开发之旅,截止今天,已经做了2个项目,给我的感受是iOS开发整体要比Android简单,但是开发细节上两者却又同样的烦恼。那么要想开发iOS,那么到底选择objective-c
or swift
,我的建议是前者,后者可以在swift2.0和xcode7 以后大家去学习会比较好些。好了,不废话了,下面咱们来看下objective-c和java语法上的比较,希望能让java同学迅速掌握objective-c的语法,能够快速开启iOS开发之旅。
首先,回顾下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 指的是当前类的自身指针。
集成就很简单了,java使用extends
关键字来定义。而oc使用冒号表示继承关系。
继承的好处我就不用多说了。
说道接口,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开发不是难事,为自己加油吧!