iOS中Block+單利解決不相關(guān)聯(lián)的界面通訊問題

使用場景

A視圖和B視圖沒有直接跳轉(zhuǎn)關(guān)系,當(dāng)A視圖數(shù)據(jù)發(fā)生改變需要觸發(fā)B視圖的刷新事件,當(dāng)A視圖向B視圖傳遞一些信息,或者修改B視圖的一些界面,或者一些界面?zhèn)髦祮栴},此類問題大部分人都是采用通知去解決,block+單利便可以解決這些問題,同事block+單利還可以去替代代理,通知去處理一些他們無法完成事。

使用步驟

1.創(chuàng)建一個單利對象(單利本身所具備的屬性,以及他的作用也是非常強(qiáng)大的,單利的使用就不過多贅述)

#import "RefreshStatus.h"

@implementation RefreshStatus

static RefreshStatus *manager = nil;

+(RefreshStatus *)SimpleInterest

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

manager = [[self alloc]init];

});

return manager;

}

@end


2.把block作為單利對象中的一個屬性(一般一個功能來寫一個block)

#import@interface RefreshStatus : NSObject

/**

單利對象

*/

+(RefreshStatus *)SimpleInterest;

/**

資產(chǎn)頁刷新的block

*/

@property(nonatomic,copy) void(^assetRefreshStatue)(id *status);

-(void)RefreshAssetVC:(id *status);//這個方法只是為了方便調(diào)用

@end

-(void)RefreshAssetVC:(id *status)

{

if (self.assetRefreshStatue) {

self.assetRefreshStatue(status);

}

}

到此為止這僅僅只是完成對象的創(chuàng)建,使用的時候也很簡單

3.使用(拿刷新舉例)在需要觸發(fā)刷新的地方來調(diào)用這個block或者直接調(diào)用這個寫好的方法

[[RefreshStatus SimpleInterest] RefreshAssetVC:(@"這里傳你想要傳遞的值,可以為nil")]

4.監(jiān)聽(在你需要刷新的地方監(jiān)聽)

[RefreshStatus SimpleInterest].assetRefreshStatue=^(id *status){

//這里做刷新操作,或者做一些事件的處理

NSLog(@"%@通知資產(chǎn)頁刷新",status);

};


注意

這種方式適用于已存在的兩個對象之間的通訊,如果想用于還未創(chuàng)建的對象的通訊,需要做一些方法的處理。


拓展

block+單利用起來比較方便,如果對block和單利比較熟悉的情況下,結(jié)合起來可以處理很多通知和代理無法實現(xiàn)的功能,同時還可以用于一些登錄流程的邏輯的處理,例如把一個登錄的block作為單利的屬性,在需要登錄的地方去監(jiān)聽,登錄完成就去實現(xiàn)這個block,這樣其他地方的監(jiān)聽就會接收到,同時他還可以存儲一些登錄狀態(tài)或者一些常用的數(shù)據(jù)等等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容