這幾天遇到了幾個問題,順手寫下自己的理解,也當拋磚引玉了。
- UIButton 引用的 target 是強引用還是弱引用?那么 NSTimer 呢?
UIControl 文檔
The control does not retain the object in the target parameter. It is your responsibility to maintain a strong reference to the target object while it is attached to a control.
https://developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget
NSTimer 文檔
The timer maintains a strong reference to this object until it (the timer) is invalidated.
- 同步的并行隊列運行是如何的?
有序執行,同步意味著只有一條線程,并行意味著任務按照順序執行。所以說有序的。同步阻塞當前線程,異步不阻塞當前線程。 - UITableView 卡頓的解決方案?
緩存高度計算,異步渲染,離屏渲染。 - Weak 對象為什么釋放之后自動設置為 nil ?
id obj1 = 0;(該語句表示指針為空)
objc_storeWeak(&obj1, obj);
objc_destoryWeak函數將0作為參數調用objc_storeWeak函數。
objc_storeWeak(&obj1, 0);
前面的代碼與下面的代碼相同。
編譯器的模擬代碼:
id obj1;
obj1 = 0;
objc_storeWeak(&obj1, obj);
objc_storeWeak(&obj1, 0);
objc_storeWeak函數把第二個參數obj賦值對象的內存地址作為鍵值,將第一個參數附有__weak修飾變量obj1的內存地址注冊到weak表中;如果第二個參數為0,則把變量obj1的內存地址從weak表中刪除。
對象被廢棄的時候會調用objc_clear_deallocating函數,該函數會做如下的處理:
1.從weak表中獲取釋放對象的地址為鍵值的記錄。
2.將包含在記錄中所有附有__weak修飾變量的地址,賦值為nil。
3.從weak表中刪除該記錄。
4.從引用計數表中刪除釋放對象的地址為鍵值的記錄。
http://www.lxweimin.com/p/050b2d2bc91c
- __block 關鍵字修飾需要被修改的變量的原理是什么?MRC 和 ARC 上有區別嗎?
__block 修飾的外部變量引用,block 是復制其引用地址來實現訪問的。ARC 開啟的情況下,將只會有 NSConcreteGlobalBlock 和 NSConcreteMallocBlock 類型的 block。 - 怎么樣能夠一直保持線程?
手動創建的線程都由開發人員管理,所以手動建立線程就能保持線程。
7.MagicRecord 是如何實現多線程同步的? - 如何實現 KVO 編程?
KVO是基于runtime機制實現的
當某個類的屬性對象第一次被觀察時,系統就會在運行期間動態地創建該類的一個派生類,在這個派生類中重寫基類的任何被觀察屬性的setter方法。派生類在被重寫的setter方法內實現真正的通知機制
如果原類為Person,那么生成的派生類名為NSKVONotifying_Person
我們知道,每一個類中都有一個isa指針指向當前類,所有系統就是在當一個類的對象第一次被觀察的時候,系統就會偷偷將isa指針指向動態生成的派生類,從而在被監聽屬性賦值時被執行的是派生類的setter方法
鍵值觀察通知依賴于NSObject 的兩個方法: willChangeValueForKey: 和 didChangevlueForKey:;在一個被觀察屬性發生改變之前, willChangeValueForKey: 一定會被調用,這就 會記錄舊的值。而當改變發生后,didChangeValueForKey: 會被調用,繼而 observeValueForKey:ofObject:change:context: 也會被調用。
補充:KVO的這套實現機制中蘋果還偷偷重寫了class方法,讓我們誤認為還是使用的當前類,從而達到隱藏生成的派生類
- 字體適配如何實現?
- 響應鏈的方向?
hitTest 找到點擊的對象,然后向上(superView)查找響應的對應方法。 - copy 關鍵字作用?
(1).NSString、NSArray、NSDictionary 等等經常使用copy關鍵字,是因為他們有對應的可變類型:NSMutableString、NSMutableArray、NSMutableDictionary;
(2).block 也經常使用 copy 關鍵字,具體原因見官方文檔:Objects Use Properties to Keep Track of Blocks: