iOS interview

對(duì)block理解 言缤?

block對(duì)變量的賦值

static CGFloat tmp3;
@implementation ViewController
- (void)func {
    __block CGFloat tmp1 ;
__block CGFloat tmp2 ;
    void(^block)(void) = ^void(){
        tmp1 = 30;
        tmp2 = 40;
        tmp3 = 50;
    };
    block();
}
@end

對(duì)@property屬性里面修飾符的理解陨享?

1.原子性--- nonatomic 特質(zhì)
2.讀/寫權(quán)限---readwrite(讀寫)诅需、readonly (只讀)
3.內(nèi)存管理語義---assign渔呵、strong责掏、 weak馏段、unsafe_unretained轩拨、copy
4.方法名---getter=<name> 、setter=<name>
5.不常用的:nonnull,null_resettable,nullable

1). readwrite 是可讀可寫特性院喜。需要生成getter方法和setter方法亡蓉。
2). readonly 是只讀特性。只會(huì)生成getter方法喷舀,不會(huì)生成setter方法砍濒,不希望屬性在類外改變淋肾。
3). assign 是賦值特性。setter方法將傳入?yún)?shù)賦值給實(shí)例變量;僅設(shè)置變量時(shí),assign用于基本數(shù)據(jù)類型爸邢。
4). retain(MRC)/strong(ARC) 表示持有特性樊卓。setter方法將傳入?yún)?shù)先保留,再賦值杠河,傳入?yún)?shù)的retaincount會(huì)+1碌尔。
5). copy 表示拷貝特性。setter方法將傳入對(duì)象復(fù)制一份券敌,需要完全一份新的變量時(shí)唾戚。
6). nonatomic 非原子操作。決定編譯器生成的setter和getter方法是否是原子操作待诅,atomic表示多線程安全颈走,一般使用nonatomic,效率高咱士。

#import立由、#include@class 有什么區(qū)別序厉?

#import是Objective-C導(dǎo)入頭文件的關(guān)鍵字锐膜,使用#import頭文件會(huì)自動(dòng)只導(dǎo)入一次,不會(huì)重復(fù)導(dǎo)入弛房。
#include是C/C++導(dǎo)入頭文件的關(guān)鍵字道盏。
@class告訴編譯器某個(gè)類的聲明,當(dāng)執(zhí)行時(shí)文捶,才去查看類的實(shí)現(xiàn)文件荷逞,可以解決頭文件的相互包含。

KVO實(shí)現(xiàn)原理粹排?

KVO基本原理:

1.KVO是基于runtime機(jī)制實(shí)現(xiàn)的种远。
2.當(dāng)某個(gè)類的屬性對(duì)象第一次被觀察時(shí),系統(tǒng)就會(huì)在運(yùn)行期動(dòng)態(tài)地創(chuàng)建該類的一個(gè)派生類顽耳,在這個(gè)派生類中重寫基類中任何被觀察屬性的setter 方法坠敷。派生類在被重寫的setter方法內(nèi)實(shí)現(xiàn)真正的通知機(jī)制。
3.如果原類為Person射富,那么生成的派生類名為NSKVONotifying_Person膝迎。
4.每個(gè)類對(duì)象中都有一個(gè)isa指針指向當(dāng)前類,當(dāng)一個(gè)類對(duì)象的第一次被觀察胰耗,那么系統(tǒng)會(huì)偷偷將isa指針指向動(dòng)態(tài)生成的派生類限次,從而在給被監(jiān)控屬性賦值時(shí)執(zhí)行的是派生類的setter方法。
5.鍵值觀察通知依賴于NSObject 的兩個(gè)方法: willChangeValueForKey: 和 didChangevlueForKey:柴灯;在一個(gè)被觀察屬性發(fā)生改變之前卖漫, willChangeValueForKey:一定會(huì)被調(diào)用费尽,這就 會(huì)記錄舊的值。而當(dāng)改變發(fā)生后懊亡,didChangeValueForKey:會(huì)被調(diào)用依啰,繼而 observeValueForKey:ofObject:change:context: 也會(huì)被調(diào)用乎串。

KVO深入原理:

1.Apple 使用了 isa 混寫(isa-swizzling)來實(shí)現(xiàn) KVO 店枣。當(dāng)觀察對(duì)象A時(shí),KVO機(jī)制動(dòng)態(tài)創(chuàng)建一個(gè)新的名為:?NSKVONotifying_A的新類叹誉,該類繼承自對(duì)象A的本類鸯两,且KVO為NSKVONotifying_A重寫觀察屬性的setter?方法,setter?方法會(huì)負(fù)責(zé)在調(diào)用原?setter?方法之前和之后长豁,通知所有觀察對(duì)象屬性值的更改情況钧唐。
2.NSKVONotifying_A類剖析:在這個(gè)過程,被觀察對(duì)象的 isa 指針從指向原來的A類匠襟,被KVO機(jī)制修改為指向系統(tǒng)新創(chuàng)建的子類 NSKVONotifying_A類钝侠,來實(shí)現(xiàn)當(dāng)前類屬性值改變的監(jiān)聽;
3.所以當(dāng)我們從應(yīng)用層面上看來酸舍,完全沒有意識(shí)到有新的類出現(xiàn)帅韧,這是系統(tǒng)“隱瞞”了對(duì)KVO的底層實(shí)現(xiàn)過程,讓我們誤以為還是原來的類啃勉。但是此時(shí)如果我們創(chuàng)建一個(gè)新的名為“NSKVONotifying_A”的類()忽舟,就會(huì)發(fā)現(xiàn)系統(tǒng)運(yùn)行到注冊(cè)KVO的那段代碼時(shí)程序就崩潰,因?yàn)橄到y(tǒng)在注冊(cè)監(jiān)聽的時(shí)候動(dòng)態(tài)創(chuàng)建了名為NSKVONotifying_A的中間類淮阐,并指向這個(gè)中間類了叮阅。
4.(isa 指針的作用:每個(gè)對(duì)象都有isa 指針,指向該對(duì)象的類泣特,它告訴 Runtime 系統(tǒng)這個(gè)對(duì)象的類是什么浩姥。所以對(duì)象注冊(cè)為觀察者時(shí),isa指針指向新子類状您,那么這個(gè)被觀察的對(duì)象就神奇地變成新子類的對(duì)象(或?qū)嵗┝思翱獭#?因而在該對(duì)象上對(duì) setter 的調(diào)用就會(huì)調(diào)用已重寫的 setter,從而激活鍵值通知機(jī)制竞阐。
5.子類setter方法剖析:KVO的鍵值觀察通知依賴于 NSObject 的兩個(gè)方法:willChangeValueForKey:和 didChangevlueForKey:缴饭,在存取數(shù)值的前后分別調(diào)用2個(gè)方法: 被觀察屬性發(fā)生改變之前,willChangeValueForKey:被調(diào)用骆莹,通知系統(tǒng)該 keyPath?的屬性值即將變更颗搂;當(dāng)改變發(fā)生后, didChangeValueForKey: 被調(diào)用幕垦,通知系統(tǒng)該 keyPath?的屬性值已經(jīng)變更丢氢;之后傅联,?observeValueForKey:ofObject:change:context: 也會(huì)被調(diào)用。且重寫觀察屬性的setter?方法這種繼承方式的注入是在運(yùn)行時(shí)而不是編譯時(shí)實(shí)現(xiàn)的疚察。

KVO

對(duì)業(yè)務(wù)埋點(diǎn)的理解蒸走?

iOS無埋點(diǎn)數(shù)據(jù)SDK實(shí)踐之路
iOS無埋點(diǎn)數(shù)據(jù)SDK的整體設(shè)計(jì)與技術(shù)實(shí)現(xiàn)
iOS無埋點(diǎn)SDK 之 RN頁面的數(shù)據(jù)收集

項(xiàng)目組件化理解?

  1. 為什么用組件化貌嫡?
  2. 組件化架構(gòu)設(shè)計(jì)比驻?
  3. 組件化需要考慮到哪些影響因素?
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岛抄,一起剝皮案震驚了整個(gè)濱河市别惦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夫椭,老刑警劉巖掸掸,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蹭秋,居然都是意外死亡扰付,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門仁讨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羽莺,“玉大人,你說我怎么就攤上這事陪竿∏菀恚” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵族跛,是天一觀的道長闰挡。 經(jīng)常有香客問我,道長礁哄,這世上最難降的妖魔是什么长酗? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮桐绒,結(jié)果婚禮上夺脾,老公的妹妹穿的比我還像新娘。我一直安慰自己茉继,他們只是感情好咧叭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烁竭,像睡著了一般菲茬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天婉弹,我揣著相機(jī)與錄音睬魂,去河邊找鬼。 笑死镀赌,一個(gè)胖子當(dāng)著我的面吹牛氯哮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播商佛,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼喉钢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了威彰?” 一聲冷哼從身側(cè)響起出牧,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤穴肘,失蹤者是張志新(化名)和其女友劉穎歇盼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體评抚,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豹缀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慨代。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邢笙。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖侍匙,靈堂內(nèi)的尸體忽然破棺而出氮惯,到底是詐尸還是另有隱情,我是刑警寧澤想暗,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布妇汗,位于F島的核電站,受9級(jí)特大地震影響说莫,放射性物質(zhì)發(fā)生泄漏杨箭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一储狭、第九天 我趴在偏房一處隱蔽的房頂上張望互婿。 院中可真熱鬧,春花似錦辽狈、人聲如沸慈参。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驮配。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僧凤,已是汗流浹背畜侦。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躯保,地道東北人旋膳。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像途事,于是被迫代替她去往敵國和親验懊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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