İçeriğe geç

Swift 3 ile Pointers kullanımı

Swift 3

Merhabalar bu yazımda Swift 3 ile birlikte Pointer kullanımına örnek vereceğim. Swift 2 ile verdiğim Pointer örneklerinde değişiklikler oldu. Bazı değişkenler ve kullanım yapıları değişti yeni pointer sınıfı geldi gibi.

Pointer nedir ? diyecek olursanız Pointer değişkenin adresi üzerinde işlemler yapmanızı sağlayan bir değişken türüdür. Alt seviye programlama dilleri C,C++‘da çok önemli bir konudur, yoğun olarak kullanılmaktadır. Swift modern bir dil ve çoğu işlemi kendi ayarlayıp hafızadan atmakta ancak bazı durumlarda pointer kullanarak işlemler yapılması gerekir.

Pointer performans bazında doğru kullanımda hızlı çalışır ve direk olarak işlemleri adres üzerinden gerçekleştiği için kalıcı olur. İOS üzerinde görüntü işleme video işleme ve daha bir çok sınıfta buffer ve renderlama işlemlerinde yoğun olarak karşınıza çıkacaktır. Bu yüzden nasıl kullanıldığını öğrenmek yararınıza olacaktır.

Aşağıdaki verdiğim örnekleri inceleyerek olaya başlayabiliriz.

var ptr = UnsafeMutablePointer<Int>.allocate(capacity: 1)

ptr.initialize(to: 9)
ptr.pointee // 9
ptr.deallocate(capacity: 1)
ptr.pointee // Non Value

func pointerFunc(ptr:UnsafeMutablePointer<Int>) -> Int {
    
    if ptr.pointee == 9 {
        return 1
    }
    
    return 0
}

pointerFunc(ptr: ptr) // 0

UnsafeMutablePointer<> kalıbı değiştirilebilir eklemeler yapılabilir bir formattadır. ve kullanımı bittikten sonra yok edilmesi gerekir. Yukardaki örnekte deallocate fonksiyonu ile ayrılan yer kadar hafızaya geri veriyoruz.

var ptrStr = UnsafeMutablePointer<String>.allocate(capacity: 1)
ptrStr.initialize(to: "Kenan")
ptrStr.pointee // Kenan

İstediğiniz değiştek türünü kullanabilirsiniz.

Swift 3 ile beraber yeni bir pointer değişken türü daha ortaya çıktı buda UnsafeMutableRawPointer bu değişken türüne her türlü yapıya girmekte ve formatı desteklemekte Any Pointer Type’da diyebiliriz.

func point(x:UnsafeMutableRawPointer?) {
    print(x)
}

var cc = 60
var qq = 2.124

point(x: &cc) // 60
point(x: &qq) // 2.124

Diğer bir yapıda UnsafePointer bu yapıda tür belirledikten sonra farklı tür kullanırsanız hata verir kullanımı Mutable ile aynı değildir init ile ekleme yapılır ve hashValue ile değer okunur ve nil‘ eşitlenerek yok edilir.

Github link.

var ptrUnsafe = UnsafePointer<Int>.init(bitPattern: 31)
ptrUnsafe?.hashValue // 31

ptrUnsafe = UnsafePointer<Int>.init(bitPattern: 1111)
ptrUnsafe?.hashValue // 1111
ptrUnsafe = nil // nil

func takesAPointer(_ p: UnsafePointer<Float>) {
    print(p.pointee)
}

var x: Float = 3.14
takesAPointer(&x) // 3.14
Kategori:SwiftSwift 3

Bu yazı yorumlara kapalı.

Copyright © 2022 Kenan Atmaca