使用場(chǎng)景
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)建一個(gè)單利對(duì)象(單利本身所具備的屬性,以及他的作用也是非常強(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作為單利對(duì)象中的一個(gè)屬性(一般一個(gè)功能來寫一個(gè)block)
#import@interface RefreshStatus : NSObject
/**
單利對(duì)象
*/
+(RefreshStatus *)SimpleInterest;
/**
資產(chǎn)頁(yè)刷新的block
*/
@property(nonatomic,copy) void(^assetRefreshStatue)(id *status);
-(void)RefreshAssetVC:(id *status);//這個(gè)方法只是為了方便調(diào)用
@end
-(void)RefreshAssetVC:(id *status)
{
if (self.assetRefreshStatue) {
self.assetRefreshStatue(status);
}
}
到此為止這僅僅只是完成對(duì)象的創(chuàng)建均蜜,使用的時(shí)候也很簡(jiǎn)單
3.使用(拿刷新舉例)在需要觸發(fā)刷新的地方來調(diào)用這個(gè)block或者直接調(diào)用這個(gè)寫好的方法
[[RefreshStatus SimpleInterest] RefreshAssetVC:(@"這里傳你想要傳遞的值,可以為nil")]
4.監(jiān)聽(在你需要刷新的地方監(jiān)聽)
[RefreshStatus SimpleInterest].assetRefreshStatue=^(id *status){
//這里做刷新操作芒率,或者做一些事件的處理
NSLog(@"%@通知資產(chǎn)頁(yè)刷新",status);
};
注意
這種方式適用于已存在的兩個(gè)對(duì)象之間的通訊囤耳,如果想用于還未創(chuàng)建的對(duì)象的通訊,需要做一些方法的處理偶芍。
拓展
block+單利用起來比較方便充择,如果對(duì)block和單利比較熟悉的情況下,結(jié)合起來可以處理很多通知和代理無法實(shí)現(xiàn)的功能匪蟀,同時(shí)還可以用于一些登錄流程的邏輯的處理椎麦,例如把一個(gè)登錄的block作為單利的屬性,在需要登錄的地方去監(jiān)聽萄窜,登錄完成就去實(shí)現(xiàn)這個(gè)block铃剔,這樣其他地方的監(jiān)聽就會(huì)接收到,同時(shí)他還可以存儲(chǔ)一些登錄狀態(tài)或者一些常用的數(shù)據(jù)等等查刻。