iOS block 面試題(看這篇就夠了)

此類的例子很多博客都有,只是解釋的都很模糊,看了也還是不明白

第一題: test會(huì)打印什么?因?yàn)樯?

typedef void(^TestBlock)(void);
    NSString *test = @"test1111";
    NSLog(@"內(nèi)存地址1:%p 指針地址1: %x",test,&test);
    TestBlock b2 = ^(void){
        NSLog(@"%@",test);
        NSLog(@"內(nèi)存地址2:%p 指針地址2: %x",test,&test);
    };
    test = @"test2222";
    b2();
    NSLog(@"內(nèi)存地址3:%p 指針地址3: %x",test,&test);
  • 答案是test1111
原因:

/*
2019-03-07 15:36:02.437971+0800 OCVoicePro[65484:1357190] 內(nèi)存地址1:0x10b654448 指針地址1: e50af2b8
2019-03-07 15:36:02.438218+0800 OCVoicePro[65484:1357190] test1111
2019-03-07 15:36:02.438354+0800 OCVoicePro[65484:1357190] 內(nèi)存地址2:0x10b654448 指針地址1: 294c0
2019-03-07 15:36:02.438471+0800 OCVoicePro[65484:1357190] 內(nèi)存地址3:0x10b6544c8 指針地址3: e50af2b8
*/

c++block代碼:
static void __QQViewController__viewDidLoad_block_func_0(struct __QQViewController__viewDidLoad_block_impl_0 *__cself) {
  NSString *test = __cself->test; // bound by copy
//注釋:拷貝了新的test指針
        NSLog((NSString *)&__NSConstantStringImpl__var_folders_xl_5h4m37_n34b2xnc4gxq3z8r80000gn_T_QQViewController_2ba859_mi_1,test);
    }

-Block會(huì)對(duì)外部的變量進(jìn)行一次"臨時(shí)“的”拷貝“.產(chǎn)生一個(gè)新的指針,對(duì)象地址不變

第二題: label會(huì)顯示什么字樣?

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 300, 300, 40)];
    NSLog(@"內(nèi)存地址1:%p 指針地址1: %x",label,&label);
    label.text = @"block作用域外賦值++++";
    void (^backValue)(NSString *) = ^(NSString *str) {
        label.text = str;
        NSLog(@"內(nèi)存地址2:%p 指針地址2: %x",label,&label);
    };
    backValue(@"block作用域內(nèi)賦值------");
    NSLog(@"內(nèi)存地址3:%p 指針地址3: %x",label,&label);
    [self.view addSubview:label];
  • 答案是block作用域內(nèi)賦值------
原因:

/*
2019-03-07 15:26:52.991643+0800 OCVoicePro[65387:1352714] 內(nèi)存地址1:0x7fb253c1a740 指針地址1: ee08d280
2019-03-07 15:27:25.625023+0800 OCVoicePro[65387:1352714] 內(nèi)存地址2:0x7fb253c1a740 指針地址2: 2bca2a0
2019-03-07 15:27:52.486911+0800 OCVoicePro[65387:1352714] 內(nèi)存地址3:0x7fb253c1a740 指針地址3: ee08d280
*/

c++block代碼:
static void __TTViewController__viewDidLoad_block_func_0(struct __TTViewController__viewDidLoad_block_impl_0 *__cself, NSString *str) {
  UILabel *label = __cself->label; // bound by copy
//注釋:拷貝了新的label指針
        ((void (*)(id, SEL, NSString * _Nullable))(void *)objc_msgSend)((id)label, sel_registerName("setText:"), (NSString *)str);
    }
  • label的指針同樣被拷貝,label.text = str;的賦值是通過runtime發(fā)送了一個(gè)setText的消息對(duì)label的text屬性進(jìn)行改變.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棕洋,更是在濱河造成了極大的恐慌单默,老刑警劉巖寇仓,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惊橱,死亡現(xiàn)場離奇詭異局荚,居然都是意外死亡最住,警方通過查閱死者的電腦和手機(jī)钞澳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涨缚,“玉大人轧粟,你說我怎么就攤上這事≌提” “怎么了逃延?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長轧拄。 經(jīng)常有香客問我揽祥,道長,這世上最難降的妖魔是什么檩电? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任拄丰,我火速辦了婚禮府树,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘料按。我一直安慰自己奄侠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布载矿。 她就那樣靜靜地躺著垄潮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闷盔。 梳的紋絲不亂的頭發(fā)上弯洗,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音逢勾,去河邊找鬼牡整。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溺拱,可吹牛的內(nèi)容都是我干的逃贝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼迫摔,長吁一口氣:“原來是場噩夢啊……” “哼沐扳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起攒菠,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤迫皱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辖众,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卓起,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年凹炸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了戏阅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啤它,死狀恐怖奕筐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情变骡,我是刑警寧澤离赫,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站塌碌,受9級(jí)特大地震影響渊胸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜台妆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一翎猛、第九天 我趴在偏房一處隱蔽的房頂上張望胖翰。 院中可真熱鬧,春花似錦切厘、人聲如沸萨咳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽培他。三九已至,卻和暖如春遗座,著一層夾襖步出監(jiān)牢的瞬間商蕴,已是汗流浹背达皿。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工旗国, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顶捷,地道東北人拴还。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓短曾,卻偏偏與公主長得像略步,于是被迫代替她去往敵國和親阅畴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抗果,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,092評(píng)論 1 32
  • 1 Block機(jī)制 (Very Good) Block技巧與底層解析 http://www.reibang.com...
    Kevin_Junbaozi閱讀 4,038評(píng)論 3 48
  • 《Objective-C高級(jí)編程》這本書就講了三個(gè)東西:自動(dòng)引用計(jì)數(shù)筋帖、block、GCD冤馏,偏向于從原理上對(duì)這些內(nèi)容...
    WeiHing閱讀 9,804評(píng)論 10 69
  • C語言相關(guān)面試題 1.static有什么用途日麸? 答案:在C語言中,static主要定義全局靜態(tài)變量逮光,定義局部靜態(tài)變...
    Leeson1989閱讀 2,214評(píng)論 0 20
  • 感覺0.5的自動(dòng)鉛筆始終沒有0.7的自動(dòng)鉛筆好寫代箭,對(duì)于只會(huì)使用0.7的我始終覺得0.5太過于脆弱,也許這只是一種偏...
    何安燃閱讀 163評(píng)論 0 0