ios開發指南-第1-3章 – iPhone手機開發技術文章 iPhone軟體開發教學課程

前言:

學完瞭底層c,c++之後,現在開始重新回頭進行上層的界面設計。既然做瞭就要做好,就如同過去c,c++做的一樣。過去的一年的時間精看瞭深入淺出mfc,C++程序設計語言,effective-c++,GOF和大話設計模式,粗看瞭more effective c++, c++ premier,linux程序設計,harly guide linux, 自覺在c++方面的戰果還算不錯,現在重新撿起剛從事半年多的ios,一方面是因為money,另一方面是因為過去確實底層能力不行,對於界面處於知其然而不知其所以然的狀態,現在重新看起,書籍一定是必需品瞭。買瞭兩本書,ios開發指南和ios設計模式解析。這一段博客主要記錄書籍的學習過程,還有過去的未竟的任務,將好的思想,好的策略濃縮一下便於為我所用。

ios開發指南

國人寫的書,一直對國人的技術書籍有種抵觸情緒,不過看這本書的目錄結構比較適合我,於是放棄瞭精通ios開發那本而選擇瞭這本。這本書有點太厚瞭,接近700頁,拿在手上不適合,太重,講的東西多,但是不算雜,各項均有涉及,有個別錯誤,內容不算高深,適合我這樣的小半桶水看。ios設計模式解析是沒有時間看瞭,先讓它睡著吧,把基本的撿起來以便於自己好迅速的上手公司的代碼,要不然以後工作有我受的瞭。

第一章

xcode簡介,書籍圖片,內容介紹,書中源碼鏈接。沒啥有太大意義的內容。

第二章

應用程序的生命周期值得讀一讀。

打開程序: Not Run (applicationDidFinishLauch) -> InActive (ApplicationDidBecomeActive)-> Active

程序後臺: Active (applicationWillResignActive) -> InActive -> Backgroud (applicationDidEnterBackgroud)-> Suspend (applciationWillTerminate) -> Terminate

掛起運行: Suspend -> Backgroud (applciationWillEnterForgroud) -> InActive (applicationWillBecomeActive) -> Active

當系統內存不足的時候,後臺的Suspend程序有可能會被系統kill掉,沒有通知。

視圖的生命周期

loadView(得到一個view) -> ViewDidLoad(在生成的view後添加subview以進行自我的定制) -> ViewWillAppear -> viewWillDisappear -> didReceiveMemoryWarnning (收到內存警告) -> viewDidUnLoad

loadView是為瞭創建self.view,當從nib文件中去加載就會直接創建self.view,因此loadView也就不需要瞭。

Xcode的project和target

一個project對應這多個target,project的設置是公共的,target的設置可以覆蓋project的設置。在target的summary選項下,設置屏幕圖標57*57, Icon.png,retina屏幕為Icon@2x.png, 啟動屏幕為320*480,Default.png或者retina屏幕為Default@2x.png, 設備支持選項。

ios Api簡介

框架太多,不容易記憶,再說必要性不是很大。註意大的有四個層次: Cocoa Touch, Media, Core Services, Core OS。具體的每一個層次包含什麼,暫時不關心。還有如何使用幫助文檔,alt+鼠標點擊-》打開幫助文檔

第三章 基本的設計模式

ios常用設計模式,這個我比較擅長,相對就簡單多瞭。

單例模式

沒有使用synchronized機制,使用gcd的一種dispatch_once機制來維護僅僅執行一次的操作,比加鎖效率高一些,至於內部原理,暫時不懂,不過以後會搞定它的底層的。來個簡單代碼示例便於以後copy

@interface Singleton : NSObject

@end

@implementation Singleton

static Singleton *_shareSingleton = nil;

+ (Singleton*) sharedManager

{

static dispatch_once_t once;

dispatch_once(&once, ^{

_shareSingleton = [[Singleton alloc]init];

//…… your other initial code here

}

);

return _shareSingleton;

}

思想很簡單,私有靜態指針,類方法中分配內存並返回這個指針。為瞭防止多線程同時訪問可能會創建幾個對象,可以采用加鎖,為瞭提高效率,有一種二次探測的策略;這裡采用的GCD的內容保證隻執行一次。

示例: UIAccelerometer NSUserDefault NSNotificationCenter等等。

委托模式

我比較撓頭的一種模式,說起來就是我定義瞭一個框架,但是又想給使用者以個性化的操作,於是將個性化的操作提取出來,制作成協議,讓客戶去實現協議。舉個UITableView的例子, ViewController實現UITableViewDelegate協議, viewController持有一個UItableView的指針,設置tableView.delegate = self。這樣tableView相當於將個性化的操縱留給瞭ViewController去完成瞭。

簡單類圖:

UITableViewDelegate

|

|

UITableView (持有delegate指針)————->MyViewController(持有tableView指針,並設置delegate)

MyViewController繼承delegate同時持有tableView的指針,這個是一個強引用。UITableView也持有一個delegate指針,由於這個指針最終要賦值為MyViewController對象,因此為瞭避免循環引用,一定是一個弱引用。一般是在MyViewControlller中設置tableView.delegate為自身,也就是說MyViewController負責實現delegate方法。這樣UITableView自身實現瞭TableView的基本框架,同時將用戶的個性化的可擴展的地方弄成協議供客戶實現。協議的調用肯定是UITableView內部框架去做的,它需要數據的時候就去協議要數據,協議呢給用戶以最大的擴展性,同時用戶有不用關心UITableView具體的內部是如何呈現瞭,用戶隻需要提供數據就行瞭。示例
UITextField Application

觀察者模式

相當簡單的一種設計模式,但是又相當常用。一定要記住一個Subject,n多個Observer。Subject需要實現addObserver,removeObserver,notifyAllObservers的方法,同時有一個observers數組保存所有的observer;observer需要實現update方法。當需要更新數據的時候,調用notifyAllObservers方法,這個方法中遍歷數組的所有observer,調用observer的update方法去更新數據。通知中心就是一個subject,為瞭方便使用它以單例模式實現的,後面有空要實現一個通知中心,讓自己理解更深刻一些。

KVO也是一種觀察者模式,KVO會自動給Subject類創建一個子類,然後將Subject類的isa指針指向派生類.在派生類內部添加通知觀察者的代碼,需要使用setValueForKeypath的方式,因為這種方式的派生類內部才添加瞭notifyObserver的方法。添加屬性觀察的Subject需要調用addObserver方法來添加觀察者,當屬性改變,觀察者的ObserverForKeyPath會唄調用。這個有空也實現一個,應該不算復雜,主要是內部機制自己理解還不是很透徹。

MVC模式

Cocoa中的MVC的模型和視圖沒有任何交互,全是通過中間人ViewController交互的。

ViewController持有很多View的對象指針(IBOutlet),因此可以直接操縱view,view可以通過委托和協議的機制將操作反饋給ViewController,還有button的回調(IBAction)也可以反饋到Controller。

Controller也一般持有model的指針,可以直接更新model數據;model數據可以使用Notification和KVO機制將model的更改通知給Controller。上面的這幾個策略基本上概括瞭整個MVC的東西,斯坦福公開課有一個圖片很好,大傢值得一看。

OK,就到這裡吧,得回傢瞭,太晚瞭,明天繼續寫。

發佈留言