關(guān)于iOS開(kāi)發(fā)的一些知識(shí)點(diǎn)
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
1 @property
@property 是 readwrite,assign,atomic
在使用 @property 時(shí), 編譯器默認(rèn)會(huì)進(jìn)行自動(dòng) synthesize,生成 getter 和 setter,同時(shí)把 ivar 和屬性綁定起來(lái)
使用 @dynamic,顯式表示不希望編譯器生成 getter 和 setter
protocol 中定義的屬性,編譯器不會(huì)自動(dòng) synthesize,需要手動(dòng)寫(xiě)
當(dāng)重載父類中的屬性時(shí),也必須手動(dòng)寫(xiě) synthesize
2 Extension 與 Category 有如下幾點(diǎn)顯著的區(qū)別:
使用 Extension 必須有原有類的源碼
Extension 聲明的方法必須在類的主 @implementation 區(qū)間內(nèi)實(shí)現(xiàn),可以避免使用有名 Category 帶來(lái)的多個(gè)不必要的 implementation 段。
Extension 可以在類中添加新的屬性和實(shí)例變量,Category 不可以(注:在 Category 中實(shí)際上可以通過(guò)運(yùn)行時(shí)添加新的屬性,下面會(huì)講到)
3 Bolck
在 ARC 中編譯器會(huì)自動(dòng)對(duì) block 進(jìn)行 copy 操作,但是蘋(píng)果仍然建議使用 copy 來(lái)指明編譯器的行為
block 在捕獲外部變量的時(shí)候,會(huì)保持一個(gè)強(qiáng)引用,當(dāng)在 block 中捕獲 self 時(shí),由于對(duì)象會(huì)對(duì) block 進(jìn)行 copy,于是便形成了強(qiáng)引用循環(huán)
多次調(diào)用 weakSelf 的方法,有可能在 block 執(zhí)行過(guò)程中 weakSelf 變?yōu)?nil,
涉及到 weak 本身的機(jī)制了。weak 置 nil 的操作發(fā)生在 dealloc 中
最后一個(gè)持有 object 的對(duì)象被釋放的時(shí)候,會(huì)觸發(fā)對(duì)象的 dealloc,而這個(gè)持有者的釋放操作就不一定保證發(fā)生在哪個(gè)線程了。因此 block 執(zhí)行的過(guò)程中 weakSelf 有可能在另外的線程中被置為 nil。
MRC 下Block 默認(rèn)是分配在棧上的,除非進(jìn)行顯式的 copy
ARC 也更加傾向于把 Block 放到堆上
Block進(jìn)階
Block在內(nèi)存中的位置分為三種類型NSGlobalBlock,NSStackBlock, NSMallocBlock
參考資料http://blog.devtang.com/2013/07/28/a-look-inside-blocks/
4 堆和棧
堆內(nèi)存要程序員手動(dòng)回收(動(dòng)態(tài)分配和回收內(nèi)存的)
棧內(nèi)存會(huì)被系統(tǒng)自動(dòng)回收(靜態(tài)分配和動(dòng)態(tài)分配)
靜態(tài)分配是系統(tǒng)編譯器完成的,比如局部變量的分配
動(dòng)態(tài)分配是由alloc函數(shù)進(jìn)行分配的,但是棧的動(dòng)態(tài)分配和堆是不同的,它的動(dòng)態(tài)分配也由系統(tǒng)編譯器進(jìn)行釋放,不需要程序員手動(dòng)管理
只有oc對(duì)象需要進(jìn)行內(nèi)存管理
非oc對(duì)象類型比如基本數(shù)據(jù)類型不需要進(jìn)行內(nèi)存管理
棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域。
堆是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。(堆是鏈表方式存儲(chǔ))
兩者區(qū)別
管理方式不同;(棧:自動(dòng) 堆:手動(dòng))
空間大小不同;( 棧:1M?? 32位系統(tǒng) 堆4G )
能否產(chǎn)生碎片不同;(棧:后進(jìn)先出 堆:頻繁new release 大量的碎片使程序效率變低)
生長(zhǎng)方向不同;(棧: 生長(zhǎng)方向是向下的,是向著內(nèi)存地址減小的方向增長(zhǎng) 堆:相反)
分配方式不同;(棧:靜態(tài)和動(dòng)態(tài) 堆:全動(dòng)態(tài))
分配效率不同;(棧:機(jī)器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),計(jì)算機(jī)會(huì)在底層對(duì)棧提供支持:分配專門(mén)的寄存器存放棧的地址,壓棧出棧都有專門(mén)的指令執(zhí)行,這就決定了棧的效率比較高。 堆:C/C++函數(shù)庫(kù)提供的,它的機(jī)制是很復(fù)雜的,例如為了分配一塊內(nèi)存,庫(kù)函數(shù)會(huì)按照一定的算法(具體的算法可以參考數(shù)據(jù)結(jié)構(gòu)/操作系統(tǒng))在堆 內(nèi)存中搜索可用的足夠大小的空間,如果沒(méi)有足夠大小的空間(可能是由于內(nèi)存碎片太多),就有可能調(diào)用系統(tǒng)功能去增加程序數(shù)據(jù)段的內(nèi)存空間,這樣就有機(jī)會(huì)分 到足夠大小的內(nèi)存,然后進(jìn)行返回。顯然,堆的效率比棧要低得多。)
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
關(guān)于iOS開(kāi)發(fā)的一些知識(shí)點(diǎn)下載
相關(guān)電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復(fù)哪些問(wèn)題? 376
- 華為全新鴻蒙蓄勢(shì)待發(fā) 僅支持鴻蒙內(nèi)核和鴻蒙系統(tǒng)應(yīng)用 719
- 蘋(píng)果手機(jī)系統(tǒng)iOS 17遭用戶質(zhì)疑 731
- iPhone12輻射超標(biāo)?蘋(píng)果推送iOS 17.1解決此事 750
- 傳華為囤積零部件 目標(biāo)明年智能手機(jī)出貨7000萬(wàn)部;消息稱 MiOS 僅限國(guó)內(nèi),小米 28208
- 蘋(píng)果推送iOS17.0.3,解決iPhone15Pro系列存在機(jī)身過(guò)熱 216
- Testin云測(cè)兼容和真機(jī)服務(wù)平臺(tái)中上線iPhone 15系列手機(jī) 208
- 利爾達(dá)推出搭載HooRiiOS的Matter模組 145
- 運(yùn)放參數(shù)解析:輸入偏置電流(Ibias)和失調(diào)電流(Ios) 128
- 昆侖太科發(fā)布支持國(guó)產(chǎn)飛騰騰銳D2000芯片的開(kāi)源BIOS固件版本 448