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

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

在Objective-C中,為什么要檢查self = [super init]是否不為零?

在Objective-C中,為什么要檢查self = [super init]是否不為零?

牛魔王的故事 2019-12-11 10:09:13
我有一個關(guān)于在Objective-C中編寫init方法的一般問題。我到處都看到(Apple的代碼,書籍,開放源代碼等),init方法應該在繼續(xù)進行初始化之前檢查self = [super init]是否不為零。初始化方法的默認Apple模板是:- (id) init{    self = [super init];    if (self != nil)    {        // your code here    }    return self;}為什么?我的意思是init什么時候會返回nil?如果我在NSObject上調(diào)用init并返回nil,那么一定要搞砸了,對吧?在這種情況下,您甚至可能根本不編寫程序...類的init方法返回nil真的很常見嗎?如果是這樣,在什么情況下,為什么?
查看完整描述

3 回答

?
qq_笑_17

TA貢獻1818條經(jīng)驗 獲得超7個贊

例如:


[[NSData alloc] initWithContentsOfFile:@"this/path/doesn't/exist/"];

[[NSImage alloc] initWithContentsOfFile:@"unsupportedFormat.sjt"];

[NSImage imageNamed:@"AnImageThatIsntInTheImageCache"];

... 等等。(注意:如果文件不存在,NSData可能會引發(fā)異常)。在很多地方,出現(xiàn)問題時返回零是預期的行為,因此,出于一致性的考慮,標準的做法是一直不停地檢查零。



查看完整回答
反對 回復 2019-12-12
?
嗶嗶one

TA貢獻1854條經(jīng)驗 獲得超8個贊

這個特殊的習慣用法是標準的,因為它適用于所有情況。


雖然不常見,但在某些情況下...


[super init];

...返回一個不同的實例,因此需要分配給self。


在某些情況下,它將返回nil,因此需要執(zhí)行nil檢查,以便您的代碼不會嘗試初始化不再存在的實例變量插槽。


底線是使用的已記錄的正確模式,如果不使用它,那就錯了。



查看完整回答
反對 回復 2019-12-12
?
神不在的星期二

TA貢獻1963條經(jīng)驗 獲得超6個贊

我認為,在大多數(shù)類中,如果[super init]的返回值是nil,并且按照標準做法的建議進行檢查,然后過早返回(如果是nil),則基本上您的應用仍無法正常工作。如果您考慮一下,即使那里(self!= nil)檢查存在,為了使您的班級正常運行,您實際上確實有99.99%的時間需要self不為nil?,F(xiàn)在,假設(shè),由于任何原因,[super init] 確實返回了nil,基本上您對nil的檢查基本上是將buck傳遞給了您的類的調(diào)用者,無論如何它都可能失敗,因為它自然會假定調(diào)用為成功。

基本上,我得到的是99.99%的時間,if(self!= nil)不會給您帶來任何更大的健壯性,因為您只是將責任推給了調(diào)用者。為了真正能夠可靠地處理此問題,實際上需要在整個調(diào)用層次結(jié)構(gòu)中進行檢查。即便如此,它唯一能買到的是您的應用程序?qū)⒏痈蓛?健壯地失敗。但是它仍然會失敗。

如果某個庫類由于[super init]的結(jié)果而任意決定返回nil,那么您無論如何都會感到煩惱,這更多地表明該庫類的編寫者犯了一個實現(xiàn)錯誤。

我認為當應用程序在有限得多的內(nèi)存中運行時,這更像是一種傳統(tǒng)的編碼建議。

但是對于C級代碼,我通常仍將對照NULL指針檢查malloc()的返回值。而對于Objective-C,直到我發(fā)現(xiàn)相反的證據(jù),我認為我通常會跳過if(self!= nil)檢查。為什么會有差異?

因為在C和malloc級別上,您實際上實際上可以部分恢復。我認為在Objective-C中,在99.99%的情況下,如果[super init]確實返回nil,即使您嘗試處理它,也基本上會感到滿意。您不妨讓應用程序崩潰并處理后果。



查看完整回答
反對 回復 2019-12-12
  • 3 回答
  • 0 關(guān)注
  • 296 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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