Swift中的內(nèi)存管理

1、內(nèi)存管理,weak和unowned
2、@autoreleasepool
3、C 指針內(nèi)存管理

1、內(nèi)存管理,weak和unowned
  • Swift中的unowned等效于OC中的unsafe_unretained,而Swift中的weak就是OC中的weak。如果能夠確定在訪問時(shí)不會已被釋放,就盡量使用unowned;如果存在被釋放的可能,那就選擇用weak。
  • 被標(biāo)記為weak的變量一定需要是Optional值。
  • 閉包和循環(huán)引用
lazy var printName: () —> () = {    
 [weak self] in    
 if let strongSelf = self {        
   print(“The name is \(strongSelf.name)”)    
 }
} 
//self持有閉包,閉包又持有self,循環(huán)引用。
//為了解決這種閉包內(nèi)的循環(huán)引用,我們需要在閉包開始的時(shí)候添加一個(gè)標(biāo)注,
//來表示這個(gè)閉包內(nèi)的某些要素應(yīng)該以何種特定的方式來使用,比如像這里的[weak self]。
  • 這種在閉包參數(shù)的位置進(jìn)行標(biāo)注的語法結(jié)構(gòu)是將要標(biāo)注的內(nèi)容放在原來參數(shù)的前面,并使用括號括起來。如果有多個(gè)需要標(biāo)注的元素的話,在同一個(gè)中括號內(nèi)用逗號隔開。
{ [unowned self, weak someObject] (number: Int) —> Bool in     
  //……    return true
}
2、@autoreleasepool
  • Swift中的自動釋放池的創(chuàng)建語法:
autoreleasepool {    
//dataWithContentsOfFile返回的autorelease對象。
//在Swift中更提倡的是用初始化方法而不是用像上面那樣的類方法來生成對象,
//而且從Swift 1.1開始,因?yàn)榧尤肓丝梢苑祷豱il的初始化方法,
//像上面例子中那樣的工廠方法都已經(jīng)從API中刪除了。
  let data = NSData.dataWithContentsOfFile(path, options: nil, error: nil) 
}
//使用初始化方法的話,我們就不需要面臨自動釋放的問題了,
//每次在超過作用域后,自動內(nèi)存管理都將為我們處理好內(nèi)存相關(guān)的事情。
let data = NSData(contentsOfFile: path)
3、C 指針內(nèi)存管理
  • 在Swift中C指針的內(nèi)存需要自己手動管理。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 娘不知道現(xiàn)在的視頻,抖音 只尋著問 著千篇一律的牽掛和思念 兒懷疑自己面前的是祥林嫂… 總是嘮叨著不痛不癢的問題 ...
    聽風(fēng)憶雪_208b閱讀 245評論 4 7
  • #幸福是需要修出來的~每天進(jìn)步1%~幸福實(shí)修14班~04組chfenj # 20180205(15/60) 【幸福...
    chfenj閱讀 131評論 3 1

友情鏈接更多精彩內(nèi)容