亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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

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

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

3 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

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

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

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

    return myMutableDict;}

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

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



查看完整回答
反對 回復 2019-10-21
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

你回答了你自己的問題:

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

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

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



查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 381 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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