從Android到iOS開發——(1)、objective-c與java文法對比

來源:互聯網
上載者:User

標籤:開發   android   ios   objective   

從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開發不是難事,為自己加油吧!

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

從Android到iOS開發——(1)、objective-c與java文法對比

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.