-
NSUserDefaults 傳值方法是系統幫我們封裝好的。也是將數據寫入到文件中,不需要自己去創建文件。默認在沙盒路徑中存儲我們的數據
查看全部 -
NSUserDefaults傳值:
每一個工程在創建之后都有一個默認的沙盒路徑。
通過一個頁面將數據通過NSUserDefaults的方法寫入到沙盒文件中,另一個文件通過沙盒文件讀取數據
和單例傳值比較接近,比較像,只不過單例是在內存中傳值
查看全部 -
單例傳值:得有個單例對象。所以就要創建一個單例類。單例對象的創建其實就是保證對象在程序運行過程中只有一個。就是說 每次通過類方法調用單例對象的時候都是同一個對象就可以了。
????都是同一個對象:那么就必須通過靜態變量的方式來進行創建。靜態變量一旦被賦值之后,下次再讀取的是上一次的值
首先需要有一個類方法。
實現類方法來創建單例對象。
查看全部 -
頁面傳值:
1:屬性傳值:主要運用于正向傳值。不可以進行反向傳值。也不能進行跨頁面的傳值。
2:單例傳值:可以實現正向、反向、跨頁面傳值。數據是寫入內存中,然后再從內存中讀取數據
????????????????? ?不好的點:必須要創建一個單例對象才可以 。創建單例對象需要創建單例類
3:NSUserDefaults傳值:與單例傳值相像。它是將數據寫入沙盒文件中,再從沙盒文件中讀取數據
4:代理傳值:最經典最常用的傳值方式。主要用于反向傳值,而且是一對一的,必須要兩個頁面之間建立代理關系。
5:block傳值:代理傳值能做的,block傳值都能做。也是一對一,頁面也要建立關系之后才能傳值
6:通知傳值:可以進行跨頁面之間的傳值。多對多的傳值方式。發送方發送一個值,任何一個接收方都可以接收。所以接收方接收的通知,可以來自任何發送方
查看全部 -
屬性傳值 單例傳值 NSUserDefault傳值 Delegate傳值(常用) Block傳值(常用)查看全部
-
幾種常見的頁面傳值方式:
屬性傳值:主要用于正向傳值,比較簡單,過于單一,不能進行反向傳值,也不能進行跨頁面的傳值
單例傳值:比較強大,可以實現跨頁面,正向反向都可,但是要自己創建一個單例類,將數據寫至內存
NSUserDefaults傳值:與單例傳值較像,但是是將數據寫至沙盒文件中,再進行讀取數據
代理傳值:主要用于反向傳值,而且必須為一對一關系傳值
block傳值:可以做代理傳值能做的事,且代碼較為簡介,但是也是一對一的關系傳值
通知傳值:可多對多,可跨頁面傳值,接收方接受的通知可來自于任何一個發送方
查看全部 -
通知傳值111
查看全部 -
block傳值
查看全部 -
代理頁面傳值
查看全部 -
NSUserDefaults傳值
查看全部 -
通知傳值
我們需要一個發送方和一個接收方
接收方先去監聽,模擬從頁面2 通過通知的方式傳值到頁面1,頁面1自然就是接收方,那么接收方首先是需要來監聽的,我們先看一下,我們需要監聽來等待這個消息,所以我們先在頁面1 來監聽通知,在哪個位置好呢,跳轉至頁面2之前我們先來做一個監聽,還沒有到頁面2 呢我先來監聽頁面2 的消息,你什么時候發 ,我這邊自然就可以收到了,所以呢,在跳轉至頁面2之前? 添加監聽。那么這個監聽呢,我們注意一下是通過通知中心的方式也就是說給通知中心就是我們的廣播站來添加一個觀察者也就是監聽者,那我們的通知中心是怎么創建的。
[NSNotificationCenter defaultCenter]addObserver:<#(nonnull id)#> selector:<#(nonnull SEL)#> name:<#(nullable NSNotificationName)#> object:<#(nullable id)#>
這就是我們的通知中心? 給他添加一個監聽者addObserver就是我們的self我們的接收方,selector是我們接收到通知之后的一個處理
notHandle:帶一個參數,參數就是我們的通知。name是什么呢? name就是通知的名字,你要監聽哪一個通知,所以呢notify就是通知的名字,
object這個參數填nil就行了,也就是你監聽來自哪里的通知,填nil的話表示廣播群發的,任何一個發送方只要發送了一個叫notify的通知,我們都可以收到。所以呢我們就添加好了這個觀察者了,然后呢我們來實現
notHandle的方法
就是我們收到通知之后的一個處理,那么他需要一個參數就是我們的通知
回到頁面2去發通知,在點擊回到頁面1的時候進行傳值,發送通知要通過廣播站來發送就是我們的通知中心?
查看全部 -
協議和block頁面傳值應用于兩個有直接跳轉關系的頁面之間的傳值
通知傳值相對來說更靈活? 特別是在實現跨頁面之間跳轉的時候
和我們生活里的通知是一樣的,需要有一個發送方和一個接受方,例如廣播站,廣播員就是我們的發送方他是廣播數據的,而接收方就是我們的收音機,是用來接收數據的,發送方和接收方之間如果要進行通訊的話,那么需要一個中間介質,就是我們的通知中心,也就是我們生活里面的廣播站,如果沒有廣播站的話 ,廣播員和收音機之間是無法進行通訊的,所以代碼里面的通知中心就模擬了廣播站的概念,發送方是發送數據 ,接收方是接收數據的,但是在代碼里面,我們需要注意的是我們要先在接收方定義一個觀察者來等待通知中心發出的消息,那么當他等待之后,發送方將通知發送出去,先發送到通知中心,然后通知中心拿到數據再回調給我們的接收方。這就是通知傳值的一個過程。
為什么要先觀察后發送呢,其實很簡單 ,生活中也是一樣
如果廣播員先去廣播通知,你的收音機還沒有打開,當你的收音機打開之后再去監聽的話可能已經廣播完了,你沒有聽到,所以如果你想收到廣播的通知,那么你必須首先打開收音機監聽這段通知,當通知來的時候就可以收到這份通知并且做后續的處理工作,那我們代碼也是一樣處理的,我們接收方要先觀察等待通知中心的消息,然后通知我們的發送方發送了通知,我們的通知中心自然就把消息轉播到接收方了。所以這就是通知傳值的一個過程
查看全部 -
block傳值主要應用于反向頁面傳值,我們需要在第二個頁面定義一個block用來傳值
定義一個屬性? 為了防止block的循環引用,block一搬都定義為copy屬性
@property (copy)? ?void? ? ? ? ?(^block)? ? ? ? ? (NSString*);也傳遞一個字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回值類型? ?block的名字? ? block的參數??^block的標志
看到小箭頭一定是個block?
//定義一個block進行反向傳值
一個block定義好了,block寫法相對來說麻煩了一些,但是非常好用,建議大家經常去使用block,用多了自然就寫熟了
頁面2 跳轉回頁面1 的時候進行傳值
直接調用self.block()傳值就可以了 他的傳值方式 也和C語言一樣,可以理解為block就是一個C語言函數,小括號就是C語言里的小括號,小括號里面傳遞的就是我們的實參
//block傳值--反向傳值
? ? self.block(self.textField.text);
回到頁面1 如何來接收這個block呢,block不像協議? 實現協議方法就可以了,block需要實現的話? 它是一個對象的屬性,我們要向實現block就是實現這個對象的屬性,所以我們在創建頁面2 的時候,我們就要實現這個block.
一面傳值? ?一面接收值?
查看全部 -
block傳值
蘋果最推薦也是目前最為流行的一種傳值方式,它和代理傳值做著一樣的工作,代理傳值能做的工作block都能做,他比代理傳值寫法更簡單更容易理解一些,這是近兩年蘋果主推的一種傳值的方式。
頁面1跳轉到頁面2? 頁面2回調block進行傳值
頁面1只需要實現block接收數據就可以了
簡單在不需要設置代理也不需要定義一個協議
查看全部 -
代理傳值的整個過程。
代理傳值主要是反向傳,那么反向傳我們從頁面2將值傳遞到頁面1 ,頁面2 就是我們的委托方,委托方是持有協議并且調用協議方法,而且我們的協議也是定義在委托方的,首先來看一下協議怎么定義,
@protocol passValueDelegate <NSObject>
一個傳值的這么一個代理
定義一個方法,這個方法有一個參數也就是我們要傳遞的值,那看你傳什么值了,如果是字符串就定義一個字符串,如果是某一個類的對象那你就定義一個對象就行了,我們用字符串來演示一下.
//委托方-創建一個協議
@protocol passValueDelegate <NSObject>
//協議定義一個傳值的方法
-(void)passValue:(NSString*)str;
@end
協議創建好了
那么委托方需要做的事情就是持有協議、然后呢再去調用協議方法傳值就可以了
所以呢我們要持有協議的話我們需要一個weak id指針? ?一個id指針他是持有協議的,持有協議怎么來表現呢尖括號里面寫上協議的名字就可以了,
這就是定義一個id指針,它呢持有了協議,指針的名字就叫delegate,指針的名字可以自己來取,代理呢為了防止循環引用一般使用weak來定義
持有協議之后接下來就是調用協議方法來進行傳值
點擊頁面2button的時候我們來調用我們的方法
?//代理傳值--反向傳值
這里呢使用我們的id指針 self.delegate調用我們協議的方法?
passValue
傳值傳誰呢 就傳我們textfile里面輸入的值
[self.delegate passValue:self.textField.text];
這樣就實現了代理的反向傳值
那么頁面2 通過協議將這個值傳遞之后,發出去之后? 那頁面1 怎么來接收呢
那就是我們的代理方了,代理方需要做兩個事情就是遵守協議,實現協議方法。
遵守協議怎么來遵守呢
@interface ViewController ()<passValueDelegate>//遵守協議
并且實現協議方法
//代理傳值--實現協議方法--接收來自頁面2的值
-(void)passValue:(NSString *)str
接收來自頁面2的值 :self.textField.text
我們并沒有設置代理,兩方如果通訊需要先把代理關系設置好才可以,
代理關系在哪設置,就是在我要通話的時候,第一個頁面跳轉至第二個頁面的時候,需要先把代理關系設置好,設置好之后才可以進行通訊,才可以從第二個頁面將值傳回到第一個頁面.將第二個頁面他的代理設置為第一個頁面(self)。
查看全部 -
代理傳值在iOS中是非常重要的傳值方式也是用的最多的傳值方式,相對來說要比前面三種麻煩一些。
代理傳值需要有兩個頁面,分別是委托方和代理方
委托方和代理方要進行通訊的話,必須得先有一個協議,和生活里面也是一樣的,中介 和 小名之間需要有一份協議,協議就規定了這兩方之間如何進行通訊 ,也就是它做了一個約束,大家都遵守這個約束,就可以進行通訊了。
代理傳值在iOS中的表現就是?
委托方 呢持有協議并且調用協議方法
代理方呢遵守協議實現協議方法
我們如果想傳值的 話,委托方持有協議調用協議方法進行傳值
而代理方只要遵守了這個協議并且實現協議的方法 就可以接收委托方傳過來的值,所以呢這就是我們的代理傳值。他呢主要是圍繞協議進行的,如果沒有了協議沒有了這個約束,那么兩方是不能進行通訊的,所以這就是我們的代理傳值。主要是應用于反向傳值的。也就是說我們從頁面1跳轉到頁面2 然后頁面2反向給頁面1進行傳值,我們可以通過代理的方式來進行傳遞。
查看全部 -
如果是反向傳值,在頁面2 回到頁面1的時候,
NSUserDefault傳值也可以實現跨頁面的傳值
查看全部 -
NSUserDefault傳值
這個傳值比較簡單? 就是系統幫我們封裝好的方法,也是將數據寫入到文件中,不需要我們自己去創建文件,默認在沙盒路徑中創建一個文件來存儲我們的數據。
? ? [[NSUserDefaults standardUserDefaults] setObject:@"NSUserDefaults傳值" forKey:@"NSUserDefaults"];
以上實現了NSUserDefaults寫數據
寫數據之后我們需要同步一下才能真正寫入到我們的文件中。
寫入到文件之后,第一個頁面就完成了
第二個頁面需要讀取數據,在我們的文件中讀取就行了
寫入的時候以字典的方式寫入,讀取的時候以字典的方式讀取,key就是剛才寫入的key,一定要保持一致。以及唯一性,唯一性就是如果有多個
@"NSUserDefaults"保證key不能重復,一致性就是讀的和寫的必須是同一個key。
將數據從頁面1傳遞到了頁面2
查看全部 -
NSUserDefaults傳值
首先得有兩個頁面,頁面1 頁面2??
沙盒文件,每一個工程創建之后都有一個默認的沙盒路徑
通過一個頁面將數據寫入到沙盒文件中(通過NSUserDefaults的方式寫入)
另一個頁面在沙盒文件中讀取數據就行了
和單例傳值比較接近? 比較像,只不過單例傳值我們是在內存中創建了一個單例對象
現在是將我們的數據寫入到磁盤也就是沙盒文件中
傳值的方式是差不多的
查看全部 -
單例傳值
兩個頁面 一個單例對象
其中一個頁面將數據寫入到單例對象
另一個頁面從單例對象讀取數據
就實現了頁面之間的數據傳遞? 將一個頁面的數據傳入到另外一個頁面,通過單例的方式來傳遞。
單例傳值必須有一個單例對象。
創建一個單例對象,單例的創建
單例的創建
通過類方法創建單例對象
保證對象就是在程序運行過程中只有一個就可以了,每次通過類方法來調取單例的時候都是同一個對象就可以了。
要想保證這個過程,通過靜態變量的方式來進行創建,因為靜態變量一旦被賦了值之后? 下次再讀取的是上一次的值,和普通的局部變量不一樣。
先通過靜態變量的方式來創建一個變量
單例對象如何來傳值呢
屬性傳值,在第一個頁面向第二個頁面跳轉的時候,給第二個頁面的屬性賦了值,這就是屬性傳值
單例傳值和屬性傳值也差不多,如果是正向的就可以給這個對象來賦值了。
先拿到單例對象,要通過單例來傳值,比如也傳遞一個字符串,
從頁面2給頁面1傳值通過單例也可以實現
在頁面2點擊button回到頁面1的時候可以傳遞回一個值
查看全部
舉報