2016-03-31 11 views
1

Ben Swift aşağıdaki kodu vardır:iOS'ta Swift'de bir CGDataProvider sürümünü nasıl bırakırım?

func cropToAlpha(image:CGImage) -> CGImage? { 
    let pixelDataProvider:CGDataProvider? = CGImageGetDataProvider(image) 
    if pixelDataProvider != nil { 
     let pixelData:CFData? = CGDataProviderCopyData(pixelDataProvider!) 

documentation for CGImageGetDataProvider ve documentation for CGDataProviderCopyData hem bu nesneyi bırakmadan sorumludur

demek

Swift programlama kılavuzu hakkında deinitialization konuşur ama bu bir nesne bırakmakla aynı şey değil.

Bazı Objective-C cevapları (örn How do I release a CGImageRef in iOS) CFRelease çağırarak önermek ama

CFRelease(pixelDataProvider) 

gibi bir şey çalışırsanız o zaman derleyici hatası

'CFRelease' kullanılamaz olsun: Çekirdek Vakfı nesneleri otomatik olarak bellek yönetilir.

CGIm dokümantasyonundaki talebi nasıl onur duyarım ortaya çıkan nesneleri Swift'de yayınlayarak ageGetDataProvider ve CGDataProviderCopyData? Sen bırakın gerekmez

cevap

5

(arama sonuçları Swift bültenleri ilgili sayfalarda ile çalkalanıyor olarak N.B. 'Swift serbest bırakılması' için web'de aramak yanıltıcı olduğunu). Dokümantasyon hala Objective-C'ye doğru hedeflenmiştir. Derleyici hata mesajı doğrudur. Using Swift with Cocoa and Objective-C itibaren

:

Çekirdek Vakfı nesneleri açıklamalı API'ler dönen otomatik yönetilen anılarsın Swift-sen CFRetain, CFRelease veya CFAutorelease fonksiyonları kendiniz çağırmak gerekmez.

İlgili konular