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

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

為什么我不應該在init/dealloc中使用目標C2.0訪問器?

為什么我不應該在init/dealloc中使用目標C2.0訪問器?

揚帆大魚 2019-07-15 16:17:33
為什么我不應該在init/dealloc中使用目標C2.0訪問器?在……里面@mmalc‘s 反應到這個問題他說:“一般來說,你應該不在dealloc(或init)中使用訪問器方法。我能想到的唯一真正的原因是性能和避免@Dynamicsetters的未知副作用。
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

這一切都是關于使用習慣性一致的代碼。如果您對所有代碼進行了適當的格式化,那么就有一組規(guī)則可以保證在init/dealloc中使用訪問器是安全的。

最大的問題是(正如mmalc所說),設置屬性默認狀態(tài)的代碼不應該通過訪問器,因為它會導致各種討厭的問題。問題是,沒有必要設置屬性的默認狀態(tài)。由于許多原因,我一直使用自初始化的訪問器,如下所示:

- (NSMutableDictionary *) myMutableDict {
    if (!myMutableDict) {
        myMutableDict = [[NSMutableDictionary alloc] init];
    }

    return myMutableDict;}

這種類型的屬性初始化允許一個人推遲許多可能實際上不需要的init代碼。在上述情況下,init不負責引入屬性狀態(tài),而且在init方法中使用訪問器是完全安全的(甚至是必要的)。

誠然,這確實對您的代碼施加了額外的限制,例如,對于超類中的屬性,帶有自定義訪問器的子類必須調用超類訪問器,但這些限制并不與Cocoa中常見的其他各種限制不一致。


查看完整回答
反對 回復 2019-07-15
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

你回答了你自己的問題:

  1. 性能本身可能是一個非常充分的理由(特別是如果您的訪問器是原子的)。
  2. 您應該避免訪問器可能產生的任何副作用。

如果您的類可能被子類化,則后者尤其是一個問題。

但是,還不清楚為什么這一問題被專門用于目標-C2訪問器?無論您是使用聲明的屬性還是自己編寫訪問器,都適用相同的原則。


查看完整回答
反對 回復 2019-07-15
  • 3 回答
  • 0 關注
  • 506 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號