KVO愈涩、KVC、Delegate、通知中心斟览、MVC、單例已烤、Block

1. KVO

KeyValueObseving(鍵值監(jiān)聽)

提供了觀察某一屬性變化的方法。當(dāng)某個對象的屬性發(fā)生改變的時候(用KVO監(jiān)聽)

[person addObsever:(nonnull NSObject *) forkeyPath:(nonnull NSObject *)?

? options:(NSkeyValueObseveingOptions) content:(nullable void *)];

但KVO的性能不好稍计,底層會動態(tài)產(chǎn)生新的類

一個對象的屬性能被多個對象監(jiān)聽裕循,一個對象能夠監(jiān)聽多個對象的其他屬性

作用:

給對象綁定一個監(jiān)聽器(觀察者)

- observer 觀察者

- keyPath 要監(jiān)聽的屬性

- options 選項(方法中拿到屬性值)

2.KVC

KeyValueCoding(鍵值編碼)

person.name = @"張三";

? or

[person setValue:@“張三” forkey:@“name”];

利用KVC可以進行簡單的賦值

利用KVC修改類的私有成員變量

3.delegate

把某個對象要做的事情委托給別的對象去做。那么別的對象就是這個對象的代理硅则,代替它來打理要做的事株婴。反映到程序中,首先要明確一個對象的委托方是哪個對象困介,委托所做的內(nèi)容又是什么。

4.通知中心

NSNotification-比較靈活

一個通知能被多個對象接收徒扶,一個對象能夠接收多個通知

通知的三個屬性:

@property (readonly, copy) NSString *name; //名稱

@property (nullable, readonly, retain) id object; //發(fā)布者

@property (nullable, readonly, copy) NSDictionary *userInfo; //額外信息

初始化(可以理解為創(chuàng)建)一個通知(NSNotification)對象只有通知的的名稱和通知的發(fā)布者

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;?

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo;?

- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;

a).首先八回,在需要接收通知的地方注冊觀察者,比如

? ?//獲取通知中心單例對象

? ? ?NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

? ?//添加當(dāng)前類對象為一個觀察者溶浴,name和object設(shè)置為nil管引,表示接收一切 通知

? ? [center addObserver:self selector:@selector(notice:) name:@"aha" ?object:nil];?

b).然后,在我們需要時發(fā)送通知消息

? ? //創(chuàng)建消息對象

? ? ?NSNotification *notification = [[NSNotification alloc]initWithName:@"aha" object:@"hah" userInfo:@{@"我是消息":@"hello"}];

? ? //使用通知中心發(fā)送通知

? ? [[NSNotificationCenter defaultCenter]postNotification:notification];

c).執(zhí)行通知方法

1谅将、發(fā)布一個notification通知重慢,可在notification對象中設(shè)置通知的名稱、通知發(fā)布者隅熙、額外信息等

- (void)notice:(NSNotification *)notification{}

2、發(fā)布一個名稱為aName的通知囚戚,anOject為這個通知的發(fā)布者

- (void)postNotificationName:(NSString *)aName object:(id)anOject{}

3、發(fā)布一個名稱為aName的通知匾二,anObject為這個通知的發(fā)布者拳芙,aUserInfo為額外信息

- (void)postNotificationName:(NSString *)aName object:(id)anOject?userInfo:(NSDictionary*)aUserInfo{}

d).移除通知

通知中心不會保留監(jiān)聽器對象,在通知中心注冊過的對象转培,必須在該對象注釋前移除通知浆竭。否則,當(dāng)相應(yīng)的通知再次出現(xiàn)時邦泄,通知中心仍然會向該監(jiān)聽器發(fā)送消息。因為相應(yīng)的監(jiān)聽器對象已經(jīng)被釋放了肌索,所以可能會導(dǎo)致應(yīng)用崩潰

通知中心提供了相應(yīng)的方法來取消注冊監(jiān)聽器

- (void)removeObserver:(id)observer;

- (void)removeObserver:(id)observer name:(NSString*)aName object:(id)anObject;

一般在監(jiān)聽器銷毀之前取消注冊(如在監(jiān)聽器中加入下列代碼):

- (void)dealloc {

? ? //[super dealloc];?非ARC中需要調(diào)用此句

??? [[NSNotificationCenterdefaultCenter]removeObserver:self];

}

5.MVC


創(chuàng)建model類

找到Cocoa Touch Class诚亚,繼承自NSObject

在聲明屬性的時候午乓,不要在這里聲明UIKit框架里的東西,因為model與view本身沒有關(guān)聯(lián)

字符串一般用copy

6.單例

單例模式是一種常用的軟件設(shè)計模式梢灭。在它的核心結(jié)構(gòu)中只包含一個被稱為單例的特殊類蒸其。通過單例模式可以保證系統(tǒng)中一個類只有一個實例

7.Block

block作用:block是對象,它封裝了一段代碼钥顽,這段代碼可以在任何時候執(zhí)行靠汁。block可以作為函數(shù)參數(shù)或者函數(shù)的返回值湿蛔,而其本身又可以帶輸入?yún)?shù)或返回值县爬。它和傳統(tǒng)的函數(shù)指針很類似添谊,但是有區(qū)別:block是inline的,并且它對局部變量是只讀的斩狱。

block分為聲明定義泌枪、類型秕岛、調(diào)用

1).block聲明:返回值(^block變量名)(參數(shù))

即,void(^block)()修壕;

2).block定義:三種方式 = ^(參數(shù)){ ?}遏考;

第一種:最常用

? ? ? ? ? ? void(^block1)= ^( ){?

? ? ? ? ? ? NSLog(@"調(diào)用了block1");

? ? ? ? ? ? };

第二種:如果沒有參數(shù)灌具,參數(shù)可以隱藏。如果有參數(shù)督笆,定義的時候截歉,必須要寫參數(shù),?

? ? ? ? ? ? 而且要寫參數(shù)的變量名

? ? ? ? ? ? void(^block2)= ^ { ?}瘪松;//無參

? ? ? ? ? ? void(^block2)(int)= ^(int a) {? }宵睦; //有參

第三種:block返回可以省略,不管有沒有返回值壳嚎,都沒有省略

? ? ? ? ? ? int(^block3)= ^ (int){?

? ? ? ? ? ? return 3末早;

? ? ? ? ? ? }说庭;

3).block類型:int(^)(NSString *)

? ? ? ? ? ? ?int(^block4)(NSString *)= ^(NSString *name) {??

? ? ? ? ? ? ?return 2;?

? ? ? ? ? ? ?};

4).block調(diào)用:

block1()姿搜;

block的快捷方式:inline

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捆憎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子致份,更是在濱河造成了極大的恐慌础拨,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雇锡,死亡現(xiàn)場離奇詭異僚焦,居然都是意外死亡,警方通過查閱死者的電腦和手機芳悲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門名扛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肮韧,你說我怎么就攤上這事∨螅” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵意乓,是天一觀的道長约素。 經(jīng)常有香客問我笆凌,道長士葫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任晦闰,我火速辦了婚禮鳍怨,結(jié)果婚禮上跪妥,老公的妹妹穿的比我還像新娘。我一直安慰自己侦香,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布罐韩。 她就那樣靜靜地躺著,像睡著了一般蟆肆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枚冗,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天蛇损,我揣著相機與錄音,去河邊找鬼股囊。 笑死床玻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锈死。 我是一名探鬼主播贫堰,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喇勋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起川背,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熄云,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缴允,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡珍德,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年练般,在試婚紗的時候發(fā)現(xiàn)自己被綠了锈候。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薄料。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡泵琳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出琳钉,到底是詐尸還是另有隱情,我是刑警寧澤歌懒,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布溯壶,位于F島的核電站,受9級特大地震影響且改,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碍拆,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望感混。 院中可真熱鬧,春花似錦婆跑、人聲如沸庭呜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽近哟。三九已至,卻和暖如春吉执,著一層夾襖步出監(jiān)牢的瞬間地来,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工咕宿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜡秽,地道東北人。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓芽突,卻偏偏與公主長得像,于是被迫代替她去往敵國和親田巴。 傳聞我的和親對象是個殘疾皇子挟秤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容