1、屬性傳值,OC中中最簡單的傳值方式。它的使用方法,只需要在推出下一個頁面之前,將下一個頁面中接受屬性在本頁面進行賦值即可。在相鄰頁面之間傳值非常方便。
2、代理傳值。使用方式:后傳前,即從后一個頁面?zhèn)飨蚯耙粋€頁面,與屬性傳值方式正好相反。它的具體實現(xiàn)過程:首先需要將在將值傳遞出去的類中實現(xiàn)一個協(xié)議,協(xié)議中寫一個代理傳值的具體方法,然后需要在傳值的類中設置一個屬性,這個屬性為一個遵循之前寫的協(xié)議的id類型。最后在需要使用數(shù)據(jù)的類中,設置代理,實現(xiàn)代理方法,就可以 拿到從后一個頁面?zhèn)鬟^來的值。進行下一步處理。
3、Plist傳值、plist傳值這種方式一般比較少用,其基本實現(xiàn)原理:系統(tǒng)在建立好新工程之后會給自己建一個plist文件,里面存儲一些關于新工程的初始設置數(shù)據(jù)。在這個文件的最大特點在于,在這個文件中的所有數(shù)據(jù)都不會因為重新啟動而發(fā)生變化,是OC中固化數(shù)據(jù)的方式之一,但是這個plist文件從工程建立開始便不會因為程序其他部分的設置而改變。
4、通知傳值、OC中比較方便的一種傳值方式,使用方法,在需要數(shù)據(jù)的界面注冊監(jiān)聽,然后在數(shù)據(jù)提供界面,這樣就可以很簡單進行傳值.例:發(fā)送通知代碼如下:[[NSNotificationCenter defaultCenter]postNotificationName:@”myNotificationName”object:broadcasterObject];
注冊接收通知的代碼如下:[[NSNotificationCenter defaultCenter]addObserver:listenerObjectselector:@selector(receivingMethodOnListener:)name:@”myNotificationName”object:nil];
優(yōu)點:通知的發(fā)送者和接受者都不需要知道對方??梢灾付ń邮胀ㄖ木唧w方法。通知的名字可以使任何字符串。
缺點:相較值觀察需要多點代碼。在刪掉之前必須移除監(jiān)聽者,否則會造成內(nèi)潤泄漏。不能傳大量數(shù)值,只能讓誰去做什么事,另外給人的感覺有點效率低。
5、block傳值、block傳值與觀察者模式傳值的實現(xiàn)機制比較相似,只是block在整個實現(xiàn)過程中顯得更加簡單,并且需要實現(xiàn)確定傳值的目的地。在觀察者傳值中,程序員可以在程序?qū)崿F(xiàn)的整個范圍內(nèi)選擇信號什么時候傳遞,即使多次傳遞也沒有關系。而block傳值則是需要將要傳遞的另一個對象確定下來,更多的是像一個老板固定的給員工分配固定的任務,然后將任務成果拿到之后進行固定的處理。
6、觀察者傳值、觀察者傳值是一種比較少用的方法,在觀察者方法中,程序員可以在某一個視圖控制器中設置觀察者和該觀察者的的標識以及受到觀察者信號之后該視圖控制器所應該進行的操作。在設置好觀察者之后的程序?qū)崿F(xiàn)中,觀察者什么時候接收到相關的信號,就將信號傳遞給原始 的視圖控制器,然后該視圖控制器進行相關的操作即可。觀察者控制器比較強大的是可以傳遞很多東西,在很大程度上更像是給設置觀察者的對象添加啦一個遠程控制器。
7、單例傳值、單例傳值是一種比較強大的傳值方式,它可以在任意兩個界面之間進行一些簡單的值傳遞。所謂的單例傳值就是在程序?qū)崿F(xiàn)中新建一個雷、將想要傳遞的值存儲到這樣一個類中,之后咋程序的實現(xiàn)過程中想要調(diào)用這個值得所有地方都可以通過新建一個單例來取得其中的值。就像是將一個工具放在公用的地方,想要使用工具的對象到放置工具的地方取一下就可以啦,單例傳值只是多了一點,那便是每一次有對象取走其中的值后,原地都會留下相同的另外一個值。單例傳值的核心實現(xiàn)在于、程序?qū)崿F(xiàn)過程中第一次調(diào)用單例的時候是給單例賦值,之后每一次調(diào)用單例對象都是取出單例中的值
8、數(shù)據(jù)庫、數(shù)據(jù)庫也可用來傳值,一般簡單的傳值一般都會選擇以上方式,只用遇到負責數(shù)據(jù)的時候才會選用數(shù)據(jù)庫傳值。