1橄碾、淺復(fù)制和深復(fù)制的區(qū)別
淺層復(fù)制:只復(fù)制指向?qū)ο蟮闹羔槪粡?fù)制引用對(duì)象本身宁舰。
深層復(fù)制:復(fù)制引用對(duì)象本身。
意思就是說我有個(gè)A對(duì)象奢浑,復(fù)制一份后得到A_copy對(duì)象后蛮艰,對(duì)于淺復(fù)制來說,A和A_copy指向的是同一個(gè)內(nèi)存資源殷费,復(fù)制的只不過是是一個(gè)指針印荔,對(duì)象本身資源還是只有一份,那如果我們對(duì)A_copy執(zhí)行了修改操作,那么發(fā)現(xiàn)A引用的對(duì)象同樣被修改详羡,這其實(shí)違背了我們復(fù)制拷貝的一個(gè)思想仍律。深復(fù)制就好理解了,內(nèi)存中存在了兩份獨(dú)立對(duì)象本身。
2实柠、KVO and KVC
kvc: 鍵 - 值編碼是一種間接訪問對(duì)象的屬性使用字符串來標(biāo)識(shí)屬性水泉,而不是通過調(diào)用存取方法,直接或通過實(shí)例變量訪問的機(jī)制窒盐。很多情況下可以簡化程序代碼草则。
kvo: 鍵值觀察機(jī)制,他提供了觀察某一屬性變化
3蟹漓、frame和bounds有什么不同
frame指的是:該view在父view坐標(biāo)系統(tǒng)中的位置和大小炕横。(參照點(diǎn)是父親的坐標(biāo)系統(tǒng))
bounds指的是:該view在本身坐標(biāo)系統(tǒng)中 的位置和大小。(參照點(diǎn)是本身坐標(biāo)系統(tǒng))
4葡粒、進(jìn)程與線程
進(jìn)程:進(jìn)程就是一個(gè)正在運(yùn)行的程序(一堆CPU指令的集合)份殿,進(jìn)程里至少應(yīng)該包含一個(gè)線程。
線程:一條不分叉的CPU指令的集合嗽交,就是一個(gè)線程卿嘲。
多線程:在一個(gè)進(jìn)程里面,有多條不分叉的CPU指令的集合夫壁,就是多線程拾枣。
一個(gè)真正的CPU(指物理的CPU),一個(gè)物理的CPU可以虛擬成多核的CPU盒让。每一個(gè)虛擬出來的CPU核同時(shí)的某一時(shí)刻梅肤,只能執(zhí)行一個(gè)CPU指令。那么邑茄,假設(shè)CPU虛擬成了兩個(gè)核凭语,其中一個(gè)核分給了“主線程”,另一個(gè)核需要去處理3個(gè)“分線程”撩扒,分別是以下3個(gè)線程:
線程1:該條不分叉的CPU指令集包括 20句指令
線程2:該條不分叉的CPU指令集包括 15句指令
線程3:該條不分叉的CPU指令集包括 30句指令似扔。
由于上邊提到,虛擬處的CPU核在同一時(shí)刻搓谆,只能執(zhí)行一個(gè)CPU指令炒辉。
上下文切換(即,多一個(gè)CPU處理多線程時(shí)泉手,會(huì)將處理過的線程的指令的信息保存在寄存器里面黔寇,然后將時(shí)間片分配給其他線程,當(dāng)時(shí)間片再輪轉(zhuǎn)過來的時(shí)候會(huì)將寄存器狀態(tài)恢復(fù)斩萌,接著執(zhí)行沒有執(zhí)行完的指令)
多線程的優(yōu)點(diǎn):
為了提高用戶體驗(yàn)
但是多線程也有它的缺點(diǎn):
1缝裤、比較耗費(fèi)系統(tǒng)資源
2屏轰、造成資源競爭
3、會(huì)出現(xiàn) 死鎖
5憋飞、retain/copy/assign/release/autorelease/dealloc/strong/weak關(guān)鍵字
retain:使對(duì)象的引用計(jì)數(shù)+1
copy:復(fù)制內(nèi)容
assign:
release:使對(duì)象的引用計(jì)數(shù)-1
autorelease:
dealloc:
strong:
weak: