讀Effective Objective C總結(三)

  1. 在collection集合類中如NSSet中是不允許有相同的元素的,但是如果這樣寫:wKiom1XbH7OD61dIAAEXNbSkyZU907.jpg

    這樣就會第一個set的輸出結果是兩個相同的元素,第二個set的輸出結果只有一個元素

  2. 類族模式:由於在OC中沒有抽象基類,因此用工廠模式,比如我們可以用創建UIButton類似的方法:wKiom1XdF7jhmqAZAAKBFCeMziI099.jpg判斷某個實例所屬的類是否在類族之中,要用isKindOfClass不能用isMemeberOfClass,因爲有些類會有內部類型

  3. 關聯對象的使用,實際上就是在局部空間建立一個通道來共享某些類,如在UIAlert裏面共享block

  4. 消息是由接受消息的對象和函數指針構成的,若是沒有用到runtime,編譯器生成函數代碼的指令是硬編碼,如果用到動態綁定:

    第一,先要用@dynamic關鍵字修飾需要動態生成的屬性,然後重寫類的resolveInstanceMethod方法

    第二,如果第一步還是沒有找到合適的方法,就會調用forwardingTargetForSelector方法轉發給其他對象,一直執行到NSObject

    第三,如果第二步還沒有成功,就要啓動完整的消息轉發機制,首先創建NSInvocation對象,把尚未處理的消息信息全部封裝在這個對象裏

  5. 可以通過方法調換的方式,改變objc_msgSend中函數列表中IMP的指針

  6. OC對象實際上使用結構體和指針來構造的,用isMemberOfClass判斷是否爲某一特定類的實例,用isKindOfClass判斷是否爲其類或者派生類的實例,而不要用[A Class] == [B Class]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章