一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機編程>

關于iOS開發(fā)的一些知識點

大?。?/span>0.2 MB 人氣: 2017-09-25 需要積分:1

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ù)段的內存空間,這樣就有機會分 到足夠大小的內存,然后進行返回。顯然,堆的效率比棧要低得多。)

關于iOS開發(fā)的一些知識點

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關規(guī)定!

      ?