从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 <Foundation/Foundation.h>

@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 <Foundation/Foundation.h>

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 16:54:52

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

Android与iOS开发对比系列】之 数据存储

Android与iOS开发对比系列]之 数据存储 写在前面的话 相比Android和iOS,我觉得Android的数据存储更开放一些.Android天生就可以使用多Java I/O:并且天生开放的特性,开发者可以直接在SD卡中读写文件,自由度比较高.缺点吗,也是因为太开放,所以Android的相册和文件夹都惨不忍睹. Android本身自带Java的反射和注解,很早就有了ORM数据库.这里解释一下,ORM就是 Object Relation Mapping, 对象关系映射. 通过建立对象来生成数

【Android与IOS开发对比系列】之 回调机制

[Android与IOS开发对比系列]之 回调机制 Android和IOS的回调的实现原理基本相同,只是具体命名不同而已. 本文将总结 IOS的Delegate和block, Android的interface和Handler. IOS 协议 委托Delegate是协议的一种,通过@protocol声明.委托类的作用,一是传值,二是传事件. 举个例子: 要实现选相册图片, 依据图: C类是委托类,定义了一个传值方法. A类显示一个图片,点击按钮,进入B类选取图片. 当在B类选完图片,将实现met

Android &amp;Swift iOS开发:语言与框架对比

转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text 从Android到Swift iOS开发:语言与框架对比 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还

Android、IOS开发思路及项目文件结构

1.概要,对于熟悉java开发的人,同时兼顾Android.IOS的开发是没有问题的,而且可以很快上手,前提是做的应用不是太复杂,如一些数据展现为主的应用,如果要做高端的应用,还是专攻一个方向为好. 2.所谓万事开头难,首先要搭好环境,运行HelloWorld.Android的话,直接下载ADT就行.IOS的话,直接下载Xcode6就行,至于Mac系统的话,我是在台式机上装VMware9,再装Mac OS X 10.10的,配置是e3 cpu.8g内存,速度可以接受. 3.前端开发主要思路,一是

android转IOS开发学习计划

终于决定从android平台开发转向IOS开发了,从oc起步,入门从<Objective-C编程全解>开始,记录读书笔记. 学习计划: 1.读完<Objective-C编程全解>(一周时间);//日本大牛写的,翻译质量也不错,决定从这本书入门了. 2.学习黑马视频教程基础班(c,oc等基础),(两周左右时间); 3.阅读<精通IOS开发>,辅之以黑马视频IOS部分,(三周左右时间);//这本书评价还可以,计划阅读,最终是否选择还需进一步考察,烂书就不要浪费时间了. 4.

【对比Android与IOS开发系列】——Activity与UIViewController

对比开发系列 --Activity与UIViewController Activity与UIViewController Android的Activity和Fragment是最基本的界面组成,而IOS是UIViewController.几乎所有的View和空间都会放在Activity和UIViewController中. 在之上有不少扩展的: Android: FragmentActivity, AppCompatActivity IOS: UITableViewController, UICo

(原)Android到IOS开发的转换(一)

序)闲扯几句 很早就想入手ios开发,但是一直没有机会,个人没有水果机器,上个公司上班的那台mac mini虽然就在我身边,灰都有一层了,但是一直没有机会开机学习下,因为事多,自上一篇文章后,离职后,新公司给配备了mac pro,正好满足了自己都心愿,开始水果软件开发.自己也是从0开始,学习它不过就这3-4天而已,但是之前对oc还是有些了解,因此凭着android的感觉去做,移动端嘛,不都是布局上丢组件,我相信也有人如果从android走到ios也会有这样的思想吧,我的思路是: 先翻翻ios的结

手机测试环境调试 -- 微信,Android,IOS开发使用Fiddler代理

CleverCode最近在做微信开发.在调试内网用手机调试微信公众号开发的时候,发现访问触屏版配置host页面非常麻烦.最好找到一个代理工具Fiddler. 1 代理原理 1.1 不使用代理 1.2 使用代理原理 2 下载Fiddler http://download.csdn.net/detail/clevercode/9562122 3 配置Fiddler 选择 Tools >Fildder Options 4 重启Fiddler 关闭Fiddler:File > Exit; 打开Fidd

Android服务端开发1-使用Eclipse搭建Java Web服务端

本篇博客介绍如何使用Eclipse来创建一个Java Web程序,为后面讲通过Android客户端跟服务端进行交互打下基础,关于服务端可以选用的程序很多,主流的搭配是Android客户端+PHP服务端,我们也可以使用Android客户端+Java EE服务端这样的搭配,就看公司是以哪种方式提供了. 创建一个Java Web程序,没有特别复杂的流程,我们先准备一下原材料: 1. Eclipse(注:这个不是ADT Bundle,最好到官网下载针对开发Java EE的IDE,如果可以的话,选中MyE