一、ObjectC語言特性

注:本文集為自己準(zhǔn)備面試時(shí)榴芳,系統(tǒng)復(fù)習(xí)的筆記嗡靡,如大家有興趣,歡迎閱讀并指正

分類

1窟感、什么是分類?

1.聲明私有方法和使用歉井,對(duì)外不暴露
2.分解體積龐大的類文件
3.把Framework的私有方法公開化

2柿祈、分類的特點(diǎn)?分類和擴(kuò)展的區(qū)別哩至?

1.運(yùn)行時(shí)進(jìn)行決議躏嚎。通過RunTime運(yùn)行時(shí)添加到類上
2.可以為系統(tǒng)類添加分類。給NSObject添加擴(kuò)展

3菩貌、分類都可以添加哪些內(nèi)容卢佣?

1.分類可以添加實(shí)例方法,類方法箭阶,協(xié)議虚茶,屬性。
2.添加屬性只聲明了setter方法和getter方法仇参,并未有對(duì)其賦實(shí)例變量賦值嘹叫。
3.如果要實(shí)例變量,要通過關(guān)聯(lián)完成诈乒。

4罩扇、加載調(diào)用棧
程序加載順序如下:
_objc_init -> map_2_images -> map_images_nolock -> _read_iamges -> remethodizeClass
分類在remethodizeClass完成。
5怕磨、最后編譯的分類方法生效浆洗,倒序遍歷,最先訪問最后編譯的分類孩锡。分類是在運(yùn)行時(shí)決定榜轿,attachLists(mlists,mcount)該方法決定。
/// addedLists 為二維數(shù)組滩届,可以代表分類A集侯、分類B被啼、分類C的方法列表
  void attachLists(List *const * addedLists,uint32_t addedCount) {
     分類方法會(huì)“覆蓋”宿主類的方法原因
}
  • 分類添加的方法可以“覆蓋”原類方法,原類該方法依然存在
  • 同名分類方法誰能生效取決于編譯順序
  • 名字相同的分類會(huì)引起編譯報(bào)錯(cuò)棠枉,運(yùn)行時(shí)的同名參數(shù)

關(guān)聯(lián)對(duì)象

1浓体、能否為分類添加“成員變量”?

可以辈讶,使用關(guān)聯(lián)對(duì)象實(shí)現(xiàn)命浴。

/*
通過key獲取關(guān)聯(lián)對(duì)象
**/
 id objc_getAssociatedObject(id object,const void *key);
/*
關(guān)聯(lián)對(duì)象
**/
void objc_setAssociatedObject(id object,const void *key,id value,objc_AssociationPolicy policy);

/*
移除關(guān)聯(lián)對(duì)象
**/
void objc_removeAssociatedObjects(id object);
{
  "0x492192132319":{
      "@selector(text)" : {
          "value":"Hello","policy":"retain"
          },
      "@selector(title)" : {
          “value” : "a object","policy":"copy"
        }
    },
}
2、分類添加“成員變量”贱除,它添加到哪兒了呢生闲?

關(guān)聯(lián)對(duì)象由AssociationsManager管理并在AssociationsHashMap存儲(chǔ)。所有對(duì)象的關(guān)聯(lián)內(nèi)容都在同一個(gè)全局容器中月幌。

AssociationsHashMap -> DISGUISE(obj) : ObjectAssociationMap

ObjectAssociationMap -> @selector(text) : ObjcAssociation 一個(gè)實(shí)例可以添加多個(gè)關(guān)聯(lián)對(duì)象

ObjcAssociation -> OBJC_ASSOCIATION_COPY_NONATOMIC @"Hello"

擴(kuò)展

1碍讯、什么是擴(kuò)展?
  • 聲明私有屬性
  • 聲明私有方法
  • 聲明私有成員變量
2扯躺、分類和擴(kuò)展區(qū)別捉兴?
  • 擴(kuò)展是編譯時(shí)決議,分類是運(yùn)行時(shí)決議
  • 只以聲明的形式存在录语,多數(shù)情況下寄生于宿主類.m中倍啥,實(shí)現(xiàn)也在.m文件中
  • 不能以系統(tǒng)類添加擴(kuò)展

代理

1、什么是代理澎埠?是一種設(shè)計(jì)模式虽缕;@protocol形式體現(xiàn);一對(duì)一

通知

1蒲稳、使用觀察者模式來實(shí)現(xiàn)跨層傳遞消息的機(jī)制
2氮趋、你如何實(shí)現(xiàn)通知?NSNotification
  • 全局維護(hù)一個(gè)Notification_Map表弟塞,表中key為notificationName凭峡,value為監(jiān)聽者列表Observers_List;
  • list包含回調(diào)方法的數(shù)據(jù)信息决记。

KVO

1.觀察者涉及模式的一種實(shí)現(xiàn)
2.isa混寫技術(shù)實(shí)現(xiàn)KVO
  • 原理:使用觀察者監(jiān)聽A的某一屬性摧冀,系統(tǒng)會(huì)利用運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建NSKVONotifying_A,并且將A的isa指針指向NSKVONotifying_A系宫,并且重寫setterA的方法索昂。一旦調(diào)用NSKVONotifying_A重寫的setter方法,便可以執(zhí)行自定義的事件扩借。
  • 通過KVC設(shè)置能否使value生效椒惨?可以。setValue:forKey調(diào)用了setter方法
  • 通過成員變量直接賦值value能否生效潮罪?不可以康谆。需要手動(dòng)添加KVO的兩個(gè)方法才會(huì)生效

KVC

1.KVC會(huì)破壞面向?qū)ο蟮木幊趟枷搿?/h5>

屬性關(guān)鍵字

  • 讀寫權(quán)限
    readonly
  • 原子性
    atomic:可以保障賦值和獲取線程安全领斥。添加和移除不保障線程安全。如NSArray
    nonatomic
  • 引用計(jì)數(shù)
    retain/strong
    assing/unsafe_unretained
    weak
    copy

1.assign和weak的區(qū)別沃暗?

類別 修飾對(duì)象 引用計(jì)數(shù) 懸垂指針
assign 修飾基本數(shù)據(jù)類型 不改變 會(huì)產(chǎn)生
weak 對(duì)象 不改變 不會(huì)產(chǎn)生

1.weak修飾對(duì)象月洛,assign修飾對(duì)象和基本數(shù)據(jù)類型
2.assign修飾的對(duì)象,被廢棄指向原地址孽锥,會(huì)出現(xiàn)野指針嚼黔。weak修飾的會(huì)nil。

2.淺拷貝和深拷貝

淺拷貝沒有開辟內(nèi)存惜辑,引用計(jì)數(shù)+1
深拷貝開辟兩片內(nèi)容相同的內(nèi)存空間唬涧,引用計(jì)數(shù)器不+1

NSString、NSArray盛撑、NSDictory的深淺拷貝

  1. 可變對(duì)象的copy和mutableCopy都是深拷貝
  2. 不可變對(duì)象的copy是淺拷貝碎节,mutableCopy是深拷貝
  3. copy方法返回的都是不可變對(duì)象
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市撵彻,隨后出現(xiàn)的幾起案子钓株,更是在濱河造成了極大的恐慌,老刑警劉巖陌僵,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異创坞,居然都是意外死亡碗短,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門题涨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偎谁,“玉大人,你說我怎么就攤上這事纲堵⊙灿辏” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵席函,是天一觀的道長(zhǎng)铐望。 經(jīng)常有香客問我,道長(zhǎng)茂附,這世上最難降的妖魔是什么正蛙? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮营曼,結(jié)果婚禮上乒验,老公的妹妹穿的比我還像新娘。我一直安慰自己蒂阱,他們只是感情好锻全,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布狂塘。 她就那樣靜靜地躺著,像睡著了一般鳄厌。 火紅的嫁衣襯著肌膚如雪荞胡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天部翘,我揣著相機(jī)與錄音硝训,去河邊找鬼。 笑死新思,一個(gè)胖子當(dāng)著我的面吹牛窖梁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夹囚,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼纵刘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了荸哟?” 一聲冷哼從身側(cè)響起假哎,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鞍历,沒想到半個(gè)月后舵抹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劣砍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年惧蛹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刑枝。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡香嗓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出装畅,到底是詐尸還是另有隱情靠娱,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布掠兄,位于F島的核電站像云,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏徽千。R本人自食惡果不足惜苫费,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望双抽。 院中可真熱鬧百框,春花似錦、人聲如沸牍汹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嫁蛇,卻和暖如春锨并,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睬棚。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工第煮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抑党。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓包警,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親底靠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子害晦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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

  • 一、分類 1.分類的作用暑中?聲明私有方法壹瘟,分解體積大的類文件,把framework的私有方法公開 2.分類的特點(diǎn)運(yùn)行...
    長(zhǎng)茳閱讀 284評(píng)論 0 4
  • 分類(Category) 分類可以做些什么 聲明私有方法分解體積龐大的類文件把Framework的私有方法公開如通...
    小王的知識(shí)屋閱讀 261評(píng)論 0 1
  • 一鳄逾、分類(Category) 問題1:你用分類都做了哪些事情稻轨? 聲明私有方法 分解體積龐大的類文件 把Framew...
    huoshe2019閱讀 695評(píng)論 0 2
  • 分類 分類的作用 分解體積龐大的類文件為系統(tǒng)類添加方法聲明私有方法把Framework的私有方法公開 分類添加過程...
    皮皮蟹pipixie閱讀 443評(píng)論 0 3
  • 在我們的開發(fā)過程中,經(jīng)常被忽視雕凹,但經(jīng)常使用的語法知識(shí)澄者,雖然我們懂得如何運(yùn)用,但是请琳,對(duì)于他們的實(shí)現(xiàn)原理我們又掌握了多...
    荷碼人生閱讀 240評(píng)論 0 1