İçeriğe geç

Swift ile Pointer

swift

Merhabalar bu yazımda alt seviye programlama dillerinde bulunan pointerları modern Swift dilinde nasıl kullanırız. Buna örnek vereceğim.

Bildiğimiz gibi Swift çok yeni ve modern programlama anlayışıyla harmanlanmış bir dil ancak içerisinde güçlü bir C dili apisi bulunmakta. Böylelikle bizde pointerleri veya makroları kullanabilmekteyiz. Normalde yaptığımız değişken ve diğer işlemlerdeki ram tahsis etme, geri bırakma olayı otomatik olarak derleyici tarafından yapılmakta ancak biz pointer kullanırsak bu işlemleri kendimiz ayarlayıp yapmak zorundayız. İşinize yaramayacak yerlerde kullanmak mantıklı değil. Gömülü kütüphanede, Bitwise decode işlemlerinde, performans’a yönelik çevrim işlemlerinde kullanımları yoğun.

Aşağıda verdiğim örnekte Ram‘den 1 objelik yer ayırıp daha sonra o bolume değer yerleştirip geri bırakma işlemini gösterdim.

var po:UnsafeMutablePointer<Int> = UnsafeMutablePointer.alloc(1)

po.initialize(30)
po.memory // 30
po.destroy()
po.dealloc(1)

destroy işlemi içinde bulunan objeyi yok eder, dealloc ise 1 objelik yeri hafızadan temizler.

Aşağıdada fonksiyona parametre olarak nasıl gönderebilirizin örneğini verdim.

func pointMutable(p1: UnsafeMutablePointer<Int>,_ p2: UnsafeMutablePointer<Int>) -> UnsafeMutablePointer<Int> {
    
    if p1 != nil && p2 != nil {
        p1.memory = p2.memory * 2
    }
    return p1
    
}

func pointString(str: UnsafeMutablePointer<String>) {
    print(str.memory) // kenanatmaca.com
    str.destroy()
    str.dealloc(1)
}

var x:Int = 21
var y:Int = 242

var pp = pointMutable(&x, &y)
pp.memory // 484

var qq:UnsafeMutablePointer<String> = UnsafeMutablePointer.alloc(1)
qq.initialize("kenanatmaca.com")
pointString(qq)

Tip olarak mutable olmadan kullanılırsa let yani sabit değer anlamına gelmekte,ona göre işlemler yürütülmektedir.

var dm:UnsafePointer<Int> = UnsafePointer(bitPattern: 22) // 0x16
dm.hashValue // 22
dm.debugDescription.hashValue // Adress

Aşağıdada bazı kullanılan yararlı pointer fonksiyonlarını verdim.

var qq:UnsafeMutablePointer<String> = UnsafeMutablePointer.alloc(1)
qq.initialize("kenanatmaca.com")
qq.hashValue // memmory adress integer
qq.debugDescription // memmory adress
qq.successor().debugDescription // next memmory adress
qq.successor().hashValue // next memmory adress int
qq.predecessor().hashValue // previus memmory adress int

 

Tarih:Swift

Bu yazı yorumlara kapalı.

Copyright © 2021 Kenan Atmaca