小碼哥iOS學習筆記第五天 Category

2021-09-11 15:34:07 字數 1854 閱讀 1796

category一般用來給已有類新增新的功能, 或者給自定義類分模組

問: category中的方法, 儲存在什麼地方呢?

xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc person+test.m

複製**

查詢_objc_$_category_instance_methods_person_$_test:

疑問: person中的-(void)say+(void)say1方法真的被覆蓋了嗎? 為什麼呼叫的是person+eat中的方法, 而不是person+test中的方法

// 將category中的方法, 屬性, 協議等加入到類物件和元類物件中

// cls: 類物件或元類物件

// cats: 類所有的category組成的陣列

static

void attachcategories(class cls, category_list *cats, bool flush_caches)

// 找出category中的屬性列表

property_list_t *proplist =

entry.cat->propertiesformeta(ismeta, entry.hi);

if (proplist)

// 找出category中的協議列表

protocol_list_t *protolist = entry.cat->protocols;

if (protolist)

}// 取出類物件中的資料(屬性, 協議, 方法等)

auto rw = cls->data();

preparemethodlists(cls, mlists, mcount, no, frombundle);

// 將所有的category中的方法, 合併到類物件和元類物件中

rw->methods.attachlists(mlists, mcount);

free(mlists);

if (flush_caches && mcount > 0) flushcaches(cls);

// 將所有的category中的屬性, 合併到類物件和元類物件中

rw->properties.attachlists(proplists, propcount);

free(proplists);

// 將所有的category中的協議, 合併到類物件和元類物件中

rw->protocols.attachlists(protolists, protocount);

free(protolists);

}複製**

此時,category的方法就放在了方法列表中的前面, 而類中的原有方法則存在於方法列表的最後邊

問: 為什麼呼叫personsaysay1方法時, 呼叫的是person+eat中方法, 而不是person+test中方法呢?可以控制呼叫哪個category中的方法嗎?

categoryclass extension的區別是什麼?

第五天(學習筆記)

1.什麼是字典 dict.以 表示,沒一項用逗號隔開,內部元素用key value的形式來儲存資料.查詢的效率非常高,通過key來查詢元素 內部使用key來計算乙個記憶體位址 暫時 hash演算法.key必須是不可變的資料型別 key 必須是可雜湊的資料型別 可雜湊就是不可變 2.字典的增刪改查 1...

第五天筆記

1.return 可以結束一整個方法 2.為什麼要學會程式除錯 程式設計師寫出程式不一定有語法錯誤但邏輯錯誤一定有 於是我們就需要一步步拆分 逐步觀察 執行順序和資料變化 來找出問題!在可能出現錯誤的地方打斷點 4.陣列 陣列也有四要素 1陣列名 2.陣列型別 3.陣列下標 最大長度等於陣列長度減一...

學習第五天

清楚測試用例是什麼 測試用例的重要性 有效性 測試用例是測試人員測試過程中的重要參考依據,準確的測試用例的計畫 執行和跟蹤是 測試的有效性的有力證明 可復用性 設計良好的測試用例可以重複執行,能節約時間,提高測試效率 易組織性 清晰詳細的測試用例能夠便於測試執行的開展 可評估性 測試用例的通過率是檢...