【對比Android與IOS開發系列】之 Activity與UIViewController,uiviewcontroller

來源:互聯網
上載者:User

【對比Android與IOS開發系列】之 Activity與UIViewController,uiviewcontroller
對比開發系列 Activity與UIViewController

Activity與UIViewController

Android的Activity和Fragment是最基本的介面組成,而IOS是UIViewController。幾乎所有的View和空間都會放在Activity和UIViewController中。

在之上有不少擴充的:

Android: FragmentActivity, AppCompatActivity

IOS: UITableViewController, UICollectionViewController

我們對比一下繼承關係:

Android: Activity->ContextThemeWrapper->ContextWrapper->Context

IOS: UIViewController->UIResponder->NSObject

IOS幾乎所有的基類都是NSObject,Android中也有Object,一般作為Model層對象的基類。

生命週期

這方面資料很多,我簡單說一下:

Android的Activity, onCreate() 中初始化操作, onResume()中可以加一些改變介面和狀態的操作;

IOS的UIViewController, -viewDidLoad 中初始化操作, -viewWillAppear 中可以加一些改變介面和狀態的操作;

對比一下:

Activity: onCreate() –> onStart() –> onResume( )–> 運行態 –> onPause() –> onStop() –> onDestroy()

UIViewController: -viewDidLoad –> -viewWillAppear –> -viewDidAppear –> 運行態 –> -viewWillDisappear –> -viewDidDisappear

這裡補充一個Android的

Fragment:* *onAttach() –> onCreate() –> onCreateView() –> onActivityCreate() –> onStart() –> onResume( )–> 運行態 –> onPause() –> onStop() –> onDestroyView() –> onDestroy() –> onDetach()

Android與IOS都使用 堆棧 的資料結構 儲存Activity和UIViewController.

Android關於Activity的堆棧, 可以搜尋taskAffinitylaunchMode。同一應用所有Activity具有相同的親和性(taskAffinity),可通過Itent FLAG設定,也可在AndroidManifest中設定.

IOS中的UINavigationController通過堆棧來UIViewController.

介面跳轉與傳值

Android: Activity可以使用Intent,Fragment使用Bundle。 對於介面回調傳值,通過startActivityForResult()啟動和onActivityResult()接收。

IOS: 在初始化UIViewController對象時,直接給對象中的變數賦值。 對於介面回調傳值,可以自訂介面(Delegate),也可以使用通知(Notification)

結構類型類代碼
//AndroidA.java Class A extends B implements C
//IOSA.h @interface A : B A.m @implementation A <C>
強引用和弱引用

Android:

有四種參考型別,強引用(StrongReference),軟引用(SoftReference),弱引用(WeakReference),虛引用(Phantom Reference)。
一般建立的對象都是強引用。所以當記憶體空間不足時,Java虛擬機器寧願拋出OOM異常,也不會隨意回收強引用的對象。
對於軟引用,記憶體空間足夠,記憶體回收行程就不會回收它,可以做圖片的緩衝。

對於弱應用,使用情境例如:在Activity中使用Handler時,一方面需要將其定義為靜態內部類形式,這樣可以使其與外部類(Activity)解耦,不再持有外部類的引用,同時由於Handler中的handlerMessage一般都會多少需要訪問或修改Activity的屬性,此時,需要在Handler內部定義指向此Activity的WeakReference,使其不會影響到Activity的記憶體回收同時,可以在正常情況下訪問到Activity的屬性。

IOS:

使用__weak, __strong用來修飾變數,預設聲明一個對象 __strong。
在強引用中,有時會出現循環參考的情況,這時就需要弱引用來幫忙(__weak)。
強引用持有對象,弱引用不持有對象。
強引用可以釋放對象,但弱引用不可以,因為弱引用不持有對象,當弱引用指向一個強引用所持有的對象時,當強引用將對象釋放掉後,弱引用會自動的被賦值為nil,即弱引用會自動的指向nil。

私人和公有

IOS中有- +方法,-相當於Android中的private,
+相當於Android中的public static。

對於全域變數,IOS是放在AppDelegate中或者使用#define聲明在.h中。
Android同樣,放在Application中 或者類中使用public static。
當然,都可以使用單例類。

基本控制項

對比一些常用的

Android IOS
TextView UILabel
TextEdit UITextField UITextView
ImageView UIImageView
Button UIButton
Switch UISwitch
ListView TableView
GridView CollectionView

對比一下繼承:
Android Views -> View
IOS Views -> UIView -> UIResponder -> NSObject

Java實際上任何對象都是直接或間接繼承自Object,寫extends Object和不寫extends是等價的。
因此 Android和IOS的對象, 本質上都是從頂級的Object繼承來的。Amazing~

後記
暫時寫這麼多,隨後再補充。
這篇只是這個系列的第一篇,隨後再寫更多。
文章和代碼一樣,也需要不斷去梳理,不斷迭代。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.