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