剛剛更新到Xcode的Beta 4的,並與我下面的代碼,發現了以下編譯器錯誤:斯威夫特:CGPathRelease和ARC
var path = CGPathCreateMutable()
...
CGPathRelease(path)
「CGPathRelease」是不可用:核心基礎對象是 自動內存管理
所以,我只是簡單地刪除我的發佈呼叫,一切都應該罰款?還是有更多我失蹤?有什麼特殊情況我應該注意到ARC?
剛剛更新到Xcode的Beta 4的,並與我下面的代碼,發現了以下編譯器錯誤:斯威夫特:CGPathRelease和ARC
var path = CGPathCreateMutable()
...
CGPathRelease(path)
「CGPathRelease」是不可用:核心基礎對象是 自動內存管理
所以,我只是簡單地刪除我的發佈呼叫,一切都應該罰款?還是有更多我失蹤?有什麼特殊情況我應該注意到ARC?
的使用斯威夫特與可可和Objective-C的Working with Cocoa Data Types節說(重點煤礦):
核心基礎,從註釋的API返回的對象會被自動存儲在Swift- 你不需要管理調用
CFRetain
,CFRelease
或CFAutorelease
自己的功能。如果您從您自己的C函數和Objective-C方法返回Core Foundation對象,則用CF_RETURNS_RETAINED
或CF_RETURNS_NOT_RETAINED
對它們進行註釋。...
當斯威夫特進口沒有被註解的API,編譯器不能自動內存管理返回的Core Foundation對象。 Swift將這些返回的Core Foundation對象封裝在
Unmanaged<T>
結構中。
所以是的,除非你有一個Unmanaged
結構,這是正確的,你不必擔心手動釋放對象。
我很困惑,爲什麼你給這個問題添加了一個答案,重複完全相同的事情,然後鏈接到本頁的答案?也許你打算把這個帖子發佈到別的地方? –
@EpicByte它的方式更短,並刪除了許多用戶不需要的所有技術信息(我認爲)。我會重新排列接受的答案,但那會踩到腳趾,所以我會離開另一個版本。但是,既然你是OP,如果你想讓我刪除它,我會很高興。 –
所有的好處,我只是想,也許你打算在另一個問題上發佈。 –
正是我需要的,謝謝。 –
@jtbandes如何確定是否註釋了CF函數? – zaph
@Zaph如指南中所述,檢查'CF_RETURNS _...'的C頭文件中的函數的定義,或者'Unmanaged'的Swift頭文件的定義。 – jtbandes