1.weak和assign的區(qū)別
weak
- 只能修飾對象
- 當引用計數(shù)為0時,會將指針置空不會出現(xiàn)野指針
assign
- 能修飾對象和基本數(shù)據(jù)類型
- 如果修飾的是對象,當引用計數(shù)為0時,不會將指針置空,是不安全的
為什么weak會被置空?
系統(tǒng)會維護一個weak表(哈希表[對象地址: weak指針地址]),用來存儲指向某個對象的所有weak指針;當對象被釋放時通過對象指針查詢weak表找到weak指針地址并置為nil,然后再從weak表中移除此對象地址的key完成置空
2.copy和strong應用場景
copy
- 深拷貝,當對其賦值的時候會復制一份新的內容,與復制的對象不會公用一塊內存地址
- 適用于可能在可變不可變對象之間操作的場景(NSMutableString等含有Mutable的對象)
strong
- 淺拷貝,當對其賦值的時候只會復制內存地址,與復制的對象公用一塊內存地址
- 適用于不可變對象之間操作
3.響應鏈
相應鏈其實就是時間傳遞的過程,通俗的理解就是系統(tǒng)接收到事件之后是如何響應傳遞的;
簡單地說,事件是從下往上依次傳遞的或者說父->子傳遞,能夠響應事件必須繼承于UIResponder,如UIView,對應的CALayer則無法響應;
舉例:
一個vc上的view上添加一個button,那么順序依次是UIWindow-> UIView->UIButton
4.UIView和CALayer區(qū)別
5.分類和擴展
即Category和Extension
這兩個在OC中都是比較常用的
先說Extension,其實我們.m文件中所定義的@interface就是擴展,好處就是我們可以很方便的添加私有成員變量和私有函數(shù)
后續(xù)補充
#6.二叉樹
#7.排序
#8.CoreData
#9.網絡
#10.內存管理
#11.隊列
#12.內存分配
#13.init和alloc
#14.kvc和kvo
#15.鏈表