第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在目標(biāo)C中向0發(fā)送消息

在目標(biāo)C中向0發(fā)送消息

iOS
哆啦的時(shí)光機(jī) 2019-12-18 12:13:53
在目標(biāo)C中向0發(fā)送消息作為一個(gè)正在閱讀Apple的目標(biāo)-C2.0文檔的Java開發(fā)人員:我想知道向零發(fā)送信息“意思是-更不用說(shuō)它的實(shí)際用處了。從文檔中摘錄:可可有幾種模式利用了這一事實(shí)。從消息返回到零的值也可能是有效的:如果該方法返回一個(gè)對(duì)象、任何指針類型、小于或等于size of(void*)的任何整數(shù)標(biāo)量、浮點(diǎn)數(shù)、雙、長(zhǎng)雙或長(zhǎng),則發(fā)送給零的消息返回0。如果該方法返回由MacOSXABI函數(shù)調(diào)用指南在寄存器中返回的結(jié)構(gòu),那么發(fā)送給nil的消息對(duì)于數(shù)據(jù)結(jié)構(gòu)中的每個(gè)字段返回0.0。其他結(jié)構(gòu)數(shù)據(jù)類型將不填充零。如果該方法返回上述值類型以外的任何內(nèi)容,則發(fā)送給nil的消息的返回值未定義。難道Java讓我的大腦無(wú)法探索上面的解釋了嗎?或者說(shuō),我錯(cuò)過(guò)了什么東西,可以像玻璃一樣清楚地說(shuō)明這一點(diǎn)?我確實(shí)在目標(biāo)C中理解了消息/接收者的概念,我只是對(duì)一個(gè)恰好是nil.
查看完整描述

3 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

所有其他帖子都是正確的,但也許這是一個(gè)重要的概念。

在Object-C方法調(diào)用中,任何可以接受選擇器的對(duì)象引用都是該選擇器的有效目標(biāo)。

這節(jié)省了很多“X類型的目標(biāo)對(duì)象嗎?”代碼-只要接收對(duì)象實(shí)現(xiàn)選擇器,它就會(huì)使絕對(duì)沒(méi)有區(qū)別這是什么課!nil是一個(gè)接受任何選擇器的NSObject-它就是不接受什么都行。這消除了很多“檢查為零,如果是真的不要發(fā)送消息”的代碼。(“如果它接受它,它實(shí)現(xiàn)它”的概念也是允許您創(chuàng)建的。協(xié)議,這有點(diǎn)像Java接口:一個(gè)聲明,如果一個(gè)類實(shí)現(xiàn)了指定的方法,那么它就符合協(xié)議。)

這樣做的原因是為了消除猴子代碼,除了讓編譯器高興之外,它什么也不做。是的,您將獲得另一個(gè)方法調(diào)用的開銷,但您可以保存程序員時(shí)間,這是一個(gè)比CPU時(shí)間更昂貴的資源。此外,您正在從應(yīng)用程序中消除更多的代碼和更多的條件復(fù)雜性。

澄清選民:你可能認(rèn)為這不是個(gè)好方法,但這是語(yǔ)言的實(shí)現(xiàn)方式,也是推薦的編程成語(yǔ)目標(biāo)-C(參見斯坦福大學(xué)iPhone編程講座)。



查看完整回答
反對(duì) 回復(fù) 2019-12-19
?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

在引用文檔的話中,有兩個(gè)單獨(dú)的概念-如果文檔能更清楚地說(shuō)明這一點(diǎn),也許會(huì)更好:

可可有幾種模式利用了這一事實(shí)。

從消息返回到零的值也可能是有效的:

前者在這里可能更相關(guān):通常能夠?qū)⑾l(fā)送到nil使代碼更簡(jiǎn)單-您不必到處檢查空值。標(biāo)準(zhǔn)示例可能是訪問(wèn)器方法:

- (void)setValue:(MyClass *)newValue {
    if (value != newValue) { 
        [value release];
        value = [newValue retain];
    }}

如果向nil如果無(wú)效,則此方法將更加復(fù)雜-您必須進(jìn)行兩次額外的檢查才能確保valuenewValue不是nil在給他們發(fā)信息之前。

后一點(diǎn)(從消息返回到nil通常也是有效的),但是,給前者增加了一個(gè)乘數(shù)效應(yīng)。例如:

if ([myArray count] > 0) {
    // do something...}

此代碼再次不需要檢查nil價(jià)值,自然流動(dòng).。

所有這一切都表明,能夠?qū)⑾l(fā)送到nil確實(shí)要付出一些代價(jià)。有一種可能性是,您可能會(huì)在某個(gè)階段以一種特殊的方式編寫失敗的代碼,因?yàn)槟鷽](méi)有考慮到值可能是nil.



查看完整回答
反對(duì) 回復(fù) 2019-12-19
  • 3 回答
  • 0 關(guān)注
  • 464 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)