iPhone App开发实战手册学习笔记(5)之IOS常用机制
1 前言
在IOS開發中,相信大家一定聽說過委托,數據源,target,action等等,今天我們就來簡單的學習一下這些內容。
2 詳述
2.1 委托和數據源
大家是否曾經有不知道如何去執行一項任務的時候?或許是修理一臺洗碗機或者補一雙襪子。你可以學者自己做,或者找人幫你完成你不懂的地方,這就是委托。
委托(delegation)的設計模式,可以讓你的程序實現系統類定義好的接口。其工作方式:把一個對象介紹給另一個可以回答任何問題的對象。通過分配一個delegate,你可以在代碼定義相關的接口來相應請求或者狀態的變化。
如果我們的對象想要成為一個委托對象,它需要按照一定的協議來實現。協議好比是一個合同,許多在合同中的方法都是可選的,但是其他的方法是必須實現的。
例如查看一個使用委托的類:UIPickerView控件--用來從滾動列表中選取值。
查看UIPickerView類的文檔,我們會發現實例變量以如下形式定義:
?
@property(nonatomic,assign) id<UIPickerViewDataSource> dataSource;?
這一聲明說明,支持UIPickerViewDelegate協議的任何類(由id聲明)都可以使用UIPickerView的委托。
2.2 目標和操作
?
而數據源則是需要顯示的數據,作為委托,一個名為dataSource的實例變量必須在UIPickerViewDataSource協議中實現。
?
@property(nonatomic,assign) id<UIPickerViewDelegate> ? delegate; ?
在處理Cocoa Touch中的控件時候,當點擊按鈕,拖動滑塊調節音量,這些元素需要通知應用程序中的其他部分,它的狀態改變了。
其通過的是 target-action設計模式。換句話說,為每個控件設置一個target對象,用來接受改變的通知。像委托一樣,你可以選擇任何的對象。
和委托不同的地方在于,動作可以使對象定義的任何方法,只需要符合下面兩個簽名之一:
-(IBAction)actionOne{
}
-(IBAction)actionTwo:(id)sender{
}
Interface Builder使用IBAction來確定代碼中的動作。第二種形式包含一種參數,該參數是發起動作的對象。在處理動作的時候,sender可能會使用到。
2.2.1 手動添加目標對象及方法
在Cocoa Touch中的每一個控件都是UIController的子類,該類定義了一下的方法:
-(void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
該方法有三個參數,第一個是目標對象,用來接受事件活動通知。第二個是動作參數,該參數定義的消息將會發送到目標對象。第三個是controlEvents,用與指定觸發執行動作的事件類型。
例如:UIControlEventValueChanged和UIEventTouchUpInside。
2.3 深入了解視圖的生命周期
文件中的方法用 IBAction,屬性用 IBOutlet與IB(Interface Builder)關聯,例如:
@property(nonatomic,retain)IBOutlet UIButton *myButton;
他們會與.xib文件相關聯,她的前身是NIB文件,“NeXT Interface Builder”的縮寫,因為現在新的xib文件是基于XML的,所以改為xib。
NIB的加載機制使用訪問器來設置這些實例方法變量,會使用內容存的對象來調用-setMyButton:方法。
被加載的對象擁有你在IB中做的所有設置。如果你改變了視圖的背景顏色,這一變化將會記錄在內存中,兵器你的實例變量會去訪問它。
一個對象從NIB文件讀取后,會發送一條-awakeFromNib消息,但是不能用于初始化信息在這個方法里面,因為此時視圖還沒有加載,UIVIew采用的是延遲加載技術,我們可以覆蓋-viewDidLoad方法。
Cocoa Touch不僅會延遲加載,還可以在內存不足的時候將其自動移除。框架知道哪些是當前顯示的視圖,并會安全回收哪些不可見的視圖。做這個處理時,它會發送消息給視圖控制器,讓你知道呢那日不足了。
-(void)didReceiveMemoryWarning 方法。
如果我們的視圖依賴于大緩存的信息或者其他易于重建的數據,那么didReceiveMemoryWarning方法使用來清除這些對象的很好方式。
可以重寫-viewDidUnload方法,設置我們的實例變量,讓他們為空。
-(void)viewDidUnload{
self.myButton = nil;
[super viewDidUnload];
}
這里有一個細節:-viewDidLoad和-viewDidUnload方法可以唄多次調用,從而避免了初始化只可執行一次的問題。
不一定要使用NIB文件繪制圖層,可以覆蓋-loadView方法,然后用-addSubView:方法將他們添加到主視圖中去。
最后,由于NIB加載器會保留存儲在內存中的接口對象,所以你還要做最后一件事:當試圖控制器銷毀時,需要釋放這些視圖。
-(void)dealloc{
[myButton release];
? ? ? ?[super dealloc];
}
3 結語
以上是所有內容,希望對大家有所幫助。
?
轉載于:https://www.cnblogs.com/dyllove98/archive/2013/06/06/3122915.html
總結
以上是生活随笔為你收集整理的iPhone App开发实战手册学习笔记(5)之IOS常用机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个肾结石微创手术要多少钱
- 下一篇: Xt800、DEFY自带号码归属地更新包