標籤:開發 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文法對比