Bir
closure dıştaki bloğun değişkenlerini kullanabilir. Closure’lar bu bakımdan iç
içe fonksiyonlara benzetilebilir.
İçteki
fonksiyonların ya da closure’ların dış bloktaki değişkenleri kullanmasına Swift
terminolojisinde (C++’ta da aynı terim kullanılıyor) “capturing” denilmektedir.
Capture işlemini derleyici arka planda etkin olarak optimize etmektedir.
Capture
edilen değişkenler faaliyet alanını kaybetse bile derleyici bunun kalıcılığını
sağlamaktadır. Örneğin bir fonksiyon iç bir fonksiyonla ya da closure ile geri
dönebilir. Bu durumda bu iç fonksiyon ya da closure dış fonksiyonun
değişkenlerini kullanıyorsa bunlar derleyici tarafından kalıcı hale
getirilmektedir.
Burada
foo fonksiyonunun çalışması bittiğinde capture edilmiş i yok edilmemektedir.
Tabii her foo çağırımı yeni bir i’nin yaratılmasına yol açar.
Bir
fonksiyon ya da metot bir fonksiyon türünden parametre değişkenine sahipse o
parametreyi dışarda bir yere aktarmıyorsa derleyici optimizasyonu için
parametre @noescape özelliği ile özniteliklendirilebilir.
Burada
append fonksiyonunun parametresi @noescape ile nitelendirilmediği için çağrı errror
ile sonuçlanır. Fakat örneğin:
Hiç yorum yok:
Yorum Gönder
Yorumunuz için teşekkür ederim.