91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

《從零開始學Swift》學習筆記(Day 62)——Core

發布時間:2020-03-16 06:36:48 來源:網絡 閱讀:498 作者:tony關東升 欄目:移動開發

原創文章,歡迎轉載。轉載請注明:關東升的博客 

內存托管對象

Swift中調用CoreFoundation函數獲得對象時候,對象分為:內存托管對象和內存非托管對象。

內存托管對象就是由編譯器幫助管理內存,我們不需要調用CFRetain函數獲得對象所有權,也不需要調用CFRelease函數放棄對象所有權。

獲得這些內存托管對象的方法,是采用了CF_RETURNS_RETAINEDCF_RETURNS_NOT_RETAINED注釋聲明,示例代碼:

-(CGPathRef)makeToPathCF_RETURNS_RETAINED
{
    UIBezierPath* triangle = [UIBezierPathbezierPath];
    [triangle moveToPoint:CGPointZero];
    [triangleaddLineToPoint:CGPointMake(self.view.frame.size.width,0)];
    [triangle addLineToPoint:CGPointMake(0,self.view.frame.size.height)];
    [triangle closePath];
    CGPathRef theCGPath = [triangle CGPath];
    return CGPathCreateCopy(theCGPath);
}


內存托管對象使用起來比較簡單,不需要我們做額外的事情。

funcCFStringCreateWithCString(_ alloc: CFAllocator!, 
        _ cStr: UnsafePointer<Int8>,
         _encoding: CFStringEncoding) -> CFString!  //內存托管對象
 
func CFHostCreateCopy(_alloc: CFAllocator?,
         _host: CFHost) -> Unmanaged<CFHost>    //內存非托管對象


內存非托管對象

內存非托管對象就是內存需要程序員自己管理。這是由于在獲得對象的方法中沒有使用CF_RETURNS_RETAINEDCF_RETURNS_NOT_RETAINED注釋聲明,編譯器無法幫助管理內存。在具體使用時候我們可以上一節的方法判斷是否為非內存托管對象。

內存托管對象使用起來有些麻煩,要根據獲得所有權方法,進行相應的處理。

1. 如果一個函數名中包含CreateCopy,則調用者獲得這個對象的同時也獲得對象所有權,返回值Unmanaged<T>需要調用takeRetainedValue()方法獲得對象。調用者不再使用對象時候,Swift代碼中需要調用CFRelease函數放棄對象所有權,這是因為SwiftARC內存管理的。 

2. 如果一個函數名中包含Get,則調用者獲得這個對象的同時不會獲得對象所有權,返回值Unmanaged<T>需要調用takeUnretainedValue()方法獲得對象。

示例代碼如下:

let host: CFHost =CFHostCreateWithName(kCFAllocatorDefault, 
        "127.0.0.1").takeRetainedValue()
        
let hostNames: CFArray =CFHostGetNames(host, nil)!.takeUnretainedValue()


 

歡迎關注關東升新浪微博@tony_關東升。
關注智捷課堂微信公共平臺,了解最新技術文章、圖書、教程信息
 《從零開始學Swift》學習筆記(Day 62)——Core

更多精品iOSCocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定安县| 桂林市| 平远县| 吴堡县| 镇江市| 无锡市| 肇东市| 桂阳县| 固阳县| 岚皋县| 虹口区| 酉阳| 山阳县| 平南县| 松溪县| 昌都县| 南充市| 吉木萨尔县| 罗山县| 雅安市| 彰武县| 大丰市| 宜春市| 从化市| 桑植县| 宜昌市| 南京市| 杭锦后旗| 孟津县| 北宁市| 定兴县| 霍城县| 乃东县| 桃源县| 北安市| 华阴市| 大田县| 承德县| 桐柏县| 青铜峡市| 新余市|