KVC中setValue:forKey:的執行過程

丟的錢找到了發表於2019-04-02

setValue:forKey:

  1. 從這個類中查詢setKey:方法,如果方法找到了就檢查方法引數.
  2. 如果引數型別是objc物件指標則以value為引數直接呼叫步驟1中找到的set函式
  3. 如果引數型別不是objc物件指標並且value是nil,就呼叫setNilValueForKey:,這個方法的預設實現是丟擲NSInvalidArgumentException異常.
  4. 如果引數型別是基本型別,需要將value轉為NSNumber/NSValue後在呼叫步驟1中找到的set函式
  5. 如果set函式沒有找到,檢查accessInstanceVariablesDirectly屬性,如果是YES,就按照_key,_isKey,key,isKey的順序來對屬性賦值
  6. 否則的話呼叫setValue:forUndefinedKey:函式,這個函式的預設實現是丟擲NSUndefinedKeyException異常。

相關文章