KVC (Key-Value Coding) ve KVO (Key-Value Observing), Objective-C ve Swift'te (Swift'te daha az yaygın olarak) kullanılan, nesnelerin özelliklerine erişmek ve bunları değiştirmek için tasarlanmış güçlü mekanizmalardır. Temel olarak, nesnelerin özelliklerine isimlerini (key) kullanarak dolaylı olarak erişmenizi ve bunları değiştirmenizi sağlarlar. Bu, kodunuzun daha esnek, daha sürdürülebilir ve daha az bağlı olmasını sağlar.
KVC (Key-Value Coding):
setValue:forKey:
ve valueForKey:
metodlarını kullanarak erişmenizi sağlar. Bu metodlar, özellik isimlerini (string olarak) alır ve ilgili değeri ayarlamak veya almak için kullanılır. KVC, çalışma zamanında (runtime) özelliklere erişir, bu nedenle kodunuzda özellikler için önceden tanımlanmış değişkenlere ihtiyacınız olmaz.KVO (Key-Value Observing):
addObserver:forKeyPath:options:context:
metodu ile bir gözlemci eklenir ve observeValueForKeyPath:ofObject:change:context:
metodu ile değişiklikler yakalanır.removeObserver:forKeyPath:
metodu ile gözlemcilerin kaldırılması çok önemlidir.Örnek (Objective-C):
// KVC ile bir özelliğe erişim
NSString *name = [myObject valueForKey:@"name"];
[myObject setValue:@"John Doe" forKey:@"name"];
// KVO ile bir özelliğin değişimini gözlemleme
[myObject addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];
// KVO değişiklik bildirimi
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"name"]) {
NSLog(@"Name changed to: %@", [change objectForKey:NSKeyValueChangeNewKey]);
}
}
// Gözlemciyi kaldırma (önemli!)
[myObject removeObserver:self forKeyPath:@"name"];
Özetle, KVC ve KVO, Objective-C'nin güçlü ve esnek özellikleridir. Doğru kullanıldıklarında, kodun daha sürdürülebilir, okunabilir ve daha az birbirine bağlı olmasını sağlarlar. Ancak, performans ve bellek yönetimi konularına dikkat etmek önemlidir. Swift'te ise bu mekanizmalar genellikle daha az kullanılır ve daha modern teknikler tercih edilir.
Ne Demek sitesindeki bilgiler kullanıcılar vasıtasıyla veya otomatik oluşturulmuştur. Buradaki bilgilerin doğru olduğu garanti edilmez. Düzeltilmesi gereken bilgi olduğunu düşünüyorsanız bizimle iletişime geçiniz. Her türlü görüş, destek ve önerileriniz için iletisim@nedemek.page