日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

iPhone App开发实战手册学习笔记(5)之IOS常用机制

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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常用机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。