搜尋

首頁  >  問答  >  主體

ios - 為什麼有的書說在初始化方法和dealloc方法總是應該透過實例變數來讀取和寫入資料?

Effiective objecttive -c2.0 這本書說 在初始化方法和dealloc方法總是應該透過實例變數來讀取數據,看了半天沒看懂原因到底是為什麼?有看這本書的嗎?

我想大声告诉你我想大声告诉你2742 天前995

全部回覆(1)我來回復

  • 黄舟

    黄舟2017-05-17 10:07:31

    書中不是講的很清楚嗎:

    • _name = @"Jack" 不經過setter的訊息發送,直接為變數賦值,速度快。

    • 對於以下的 name 屬性:

    @property (nonatomic, copy) NSString *name;

    直接賦值是: _name = @"Jack"; ,通过 self.name = @"Jack" 其实等同于 _name = @"Jack".copy;

    • self.name = @"Jack" 会触发KVO,_name = @"Jack" 會觸發KVO,

      不會
    • self.name = @"Jack"

      可以在 setter 方法中進行斷點調試,每次賦值你都知道。

    NSString *str = _name,赋值用 self.name = @"Jack"所以有合理折中方案就是,讀取資料的時候用 NSString *str = _name,賦值用

    self.name = @"Jack"可能不等同于 _name = @"Jack".copy另外要注意的是子類別可能會複寫setter方法,用

    可能不等同於 _name = @"Jack".copy

    沒有明白你哪裡不清楚,只能用我的思路簡單描述一下。 🎜

    回覆
    0
  • 取消回覆