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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

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

3 回答

?
慕娘9325324

TA貢獻(xiàn)1783條經(jīng)驗 獲得超4個贊

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

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

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

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

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


查看完整回答
反對 回復(fù) 2019-07-26
?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗 獲得超11個贊

在引用文檔的話中,有兩個單獨的概念-如果文檔能更清楚地說明這一點,也許會更好:

可可有幾種模式利用了這一事實。

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

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

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

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

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

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

此代碼再次不需要檢查nil價值,自然流動.。

所有這一切都表明,能夠?qū)⑾l(fā)送到nil確實要付出一些代價。有一種可能性是,您可能會在某個階段以一種特殊的方式編寫失敗的代碼,因為您沒有考慮到值可能是nil.



查看完整回答
反對 回復(fù) 2019-07-26
  • 3 回答
  • 0 關(guān)注
  • 359 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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