一踏兜、委托(代理)
1.首先分清主動類和被動類,例如:A類要讓B類來完成某些事情八秃,那么A類就是主動類碱妆,B類是被動類,B類是A類的委托昔驱。
2疹尾、在主動類.h中設(shè)置協(xié)議。協(xié)議規(guī)范名稱為:<本類名+Delegate>骤肛,且繼承自基協(xié)議Object纳本。在協(xié)議中可以聲明一些方法,但不能聲明成員變量萌衬。并在@interface中設(shè)置@property (nonatomic, assign) id<協(xié)議名>delegate;
3饮醇、在主動類.m中進(jìn)行容錯處理。
4秕豫、在被動類.m中引入主動類的頭文件和協(xié)議朴艰,設(shè)置主動類的對象,并將對象的delegate = self混移。最后實現(xiàn)協(xié)議中的方法祠墅。
二、block
1歌径、同委托一樣毁嗦,首先分清主動類和被動類。
2回铛、在主動類.h中的@interface上部 定義block類狗准。typedef + 返回值 + (^block) + (參數(shù)類型 參數(shù))。 并在@interface中 @property (nonatomic, copy) block + block的屬性名;
3茵肃、在被動類.m中引入主動類的頭文件腔长,設(shè)置主動類的對象,此時主動類對象就擁有了block的屬性 = ^(返回值) + (參數(shù)類型 參數(shù)) + {代碼塊}; ? ? ? ? ? 其中验残,返回值若是空可以不寫捞附。在代碼塊中實現(xiàn)具體方法。
4、接下來只需要在主動類中 給之前定義的 block的屬性賦參數(shù)即可
三鸟召、單例
單例就像第三方一樣胆绊,A要把值傳給B,那么A先把值傳給了C(其中C是永恒不變的)欧募,然后B再從C中取出值压状,這樣就實現(xiàn)了A向B的傳值。
1槽片、分清主動類和被動類
2何缓、新建單例類,聲明(同時 聲明一個id類型的屬性object)+實現(xiàn)(實現(xiàn)有兩種方法)还栓。
3碌廓、主動類.m中設(shè)置單例的對象,先調(diào)用單例的share方法剩盒。此時單例對象就有了屬性object = 要傳的值谷婆。(single.object)
4、被動類.m中設(shè)置單例的對象辽聊,先調(diào)用單例的share方法纪挎。再將single.object賦給被動類需要得到值的對象。
單例的兩種寫法:
1跟匆、
static AccountManager *DefaultManager = nil;
+ (AccountManager *) defaultManager {
if (!DefaultManager) {
DefaultManager?=?[[self?allocWithZone:NULL]?init];
}
return DefaultManager;
}
2异袄、
+ (AccountManager *) sharedManager
{
static AccountManager?*sharedAccountManagerInstance?=?nil;
static dispatch_once_t?onceToken;
dispatch_once(&onceToken, ^{
sharedAccountManagerInstance?=?[[self?alloc]?init];
});
return sharedAccountManagerInstance;
}