android ios 異同點1

Android與IOS作爲當前世界上最流行的兩大移動端操作系統,都擁有無數的粉絲。那麼對於Android或者IOS的開發者來說,這兩個系統都擁有什麼相同或者不同的地方那?現在讓我們一起來了解一下Android和IOS的異同點。

Android、 
在Android只中所有的界面都在Activity之中呈現,也就是說只要是用戶能夠看到的都在Activity之中。Activity創建了一個窗口(Window),我們可以使用setContentView()將需要呈現的視圖(UI)放入Window之中進行顯示。 
先來看一下google對Activity的定義:這裏寫圖片描述 
Activity作爲用戶實際看到的界面,它擁有自己的生命週期,就像google介紹的一樣,在一個Activity即將出現的時候,程序會先進入onCreate方法,在這個方法裏面去定義一些我們需要去初始化的View控件。 
下面是google對Activity生命週期的描述圖: 

這裏寫圖片描述

``
    protected void onCreate(Bundle savedInstanceState)一個 Activity 的實例被啓動時調用的第一個方法。一般情況下,我們都覆蓋該方法作爲應用程序的一個入口點,在這裏做一些初始化數據、設置用戶界面等工作。大多數情況下,我們都要在這裏從 xml 中加載設計好的用戶界面。例如:

 setContentView(R.layout.main);

當然,也可從 savedInstanceState中讀我們保存到存儲設備中的數據,但是需要判斷 savedInstanceState是否爲 null,因爲 Activity 第一次啓動時並沒有數據被存貯在設備中:

 if(savedInstanceState!=null){ 
 savedInstanceState.get("Key"); 
 }
    protected void onStart()該方法在 onCreate() 方法之後被調用,或者在 Activity 從 Stop 狀態轉換爲 Active 狀態時被調用。
    protected void onResume()在 Activity 從 Pause 狀態轉換到 Active 狀態時被調用。
    protected void onResume()在 Activity 從 Active 狀態轉換到 Pause 狀態時被調用。
    protected void onStop()在 Activity 從 Active 狀態轉換到 Stop 狀態時被調用。一般我們在這裏保存 Activity 的狀態信息。
    protected void onDestroy()在 Active 被結束時調用,它是被結束時調用的最後一個方法,在這裏一般做些釋放資源,清理內存等工作。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在 android 中,Activity 擁有四種基本狀態:

Active/Runing一個新 Activity 啓動入棧後,它在屏幕最前端,處於棧的最頂端,此時它處於可見並可和用戶交互的激活狀態。
Paused 當 Activity 被另一個透明或者 Dialog 樣式的 Activity 覆蓋時的狀態。此時它依然與窗口管理器保持連接,系統繼續維護其內部狀態,所以它仍然可見,但它已經失去了焦點故不可與用戶交互。
Stoped 當 Activity 被另外一個 Activity 覆蓋、失去焦點並不可見時處於 Stoped狀態。
Killed Activity 被系統殺死回收或者沒有被啓動時處於 Killed狀態。

當一個 Activity 實例被創建、銷燬或者啓動另外一個 Activity 時,它在這四種狀態之間進行轉換,這種轉換的發生依賴於用戶程序的動作。下圖說明了 Activity 在不同狀態間轉換的時機和條件: 
這裏寫圖片描述


IOS: 
而在IOS之中,在應用程序開啓的時候,IOS會爲其創建一個窗口(UIWindow),這個UIWindow就是你應用程序顯示界面的載體,一個IOS應用程序只有一個UIWindow對象。 
在UIWindow之內被作爲界面顯示出來的真正與用戶交互的是UIViewController(視圖控制器)PS:一開始的時候,我也很不理解爲什麼會有視圖控制器這種東西,IOS是MVC設計模式,而MVC講究的是視圖與控制器分離,不知道蘋果把這兩個東西封裝到一起究竟是好還是不好。我們通過繼承UIViewController(Android需要集成Activity)來顯示界面。UIViewController作爲顯示界面的管理者,它協調其與模型對象和其他控制器對象,包括其他視圖控制器,所以說我們的一切界面跳轉都是通過它來進行的(不同於android使用intent),它爲你的應用程序提供了一個單一的連貫的用戶界面。 
看一下蘋果是怎麼去定義UIViewController的: 
這裏寫圖片描述 

IOS不同於Android需要使用XML去定義View,在IOS之中顯示界面有三種方式 
1、使用代碼 

2、使用nib 
3、使用storyboard(本質上也是nib) 
先來看一下從網上找到的一個視圖載入的流程圖: 
這裏寫圖片描述 
View是指Controller的View。它作爲Controler的屬性,生命週期在Controller的生命週期內。就是說你的Controller不能在view釋放前就釋放了。 
當你alloc並init了一個ViewController時,這個ViewController應該是還沒有創建view的。 ViewController的view是使用了lazyInit(懶加載)方式創建,就是說你調用的view屬性的getter:[self view]。在getter裏會先判斷view是否創建,如果沒有創建,那麼會調用loadView來創建view。loadView完成時會繼續調用 viewDidLoad。loadView和viewDidLoad的一個區別就是:loadView時還沒有view。而viewDidLoad時 view以及創建好了。 
OK,下面來看一下UIViewController的卸載: 
這裏寫圖片描述

不需要的資源。通常都會重寫該方法,重寫時候需要調用super的該方法。如果檢測到當前UIViewConroller的view可以被安全釋放的話,就會調用viewWillUnload方法,這個我們必須要重視,因爲當VC的view消失時候它的subviews可能會被一起釋放,我們需要根據具體情況做一些記錄,以保證下次能夠正確創建,同時不出現內存泄漏。調用viewWillUnload以後,會將self(UIViewConroller).view屬性設置成nil,然後在調用viewDidUnload方法,這個時候我們可以釋放那些強引用的對象。 
 總之 
 當一個視圖控制器被創建,並在屏幕上顯示的時候。 代碼的執行順序

1、 alloc                                   創建對象,分配空間
2、init                                     初始化對象,初始化數據
3、loadView                          從nib載入視圖 ,通常這一步不需要去幹涉。除非你沒有使用xib文件創建視圖
4、viewDidLoad                   載入完成,可以進行自定義數據以及動態創建其他控件
5、viewWillAppear              視圖將出現在屏幕之前,馬上這個視圖就會被展現在屏幕上了
6、viewDidAppear               視圖已在屏幕上渲染完成
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

當一個視圖被移除屏幕並且銷燬的時候的執行順序,這個順序差不多和上面的相反

1、viewWillDisappear            視圖將被從屏幕上移除之前執行
2、viewDidDisappear             視圖已經被從屏幕上移除,用戶看不到這個視圖了
3、dealloc                                 視圖被銷燬,此處需要對你在init和viewDidLoad中創建的對象進行釋放
  • 1
  • 2
  • 3

官網上的生命週期切換方式: 

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章