Notification Center nedir? Nasıl kullanılır? 📻

Şule Turp
NSIstanbul
Published in
4 min readFeb 5, 2018

Merhaba,

uzun zamandır tamamlayamadığım Delegate, Block, Notification üçlemesinin üçüncüsünü tamamlamak ve yazılara artık Swift ile devam etmek üzere geri geldim. Arayı açtığım için perşembeyi beklemeden paylaşayım dedim. O zaman başlayalım 📝

Bu yazıda anlatacağım yöntem başlıktaki ikon gibi radyo yayınına benzetilebilir. Bir radyo yayın yapar ve dinleyiciler o yayını dinler. Notification da bu şekilde kullanılıyor. Yayını sağlayan radyoya NotificationCenter diyebiliriz, yayın sırasında duyduklarımıza da Notification diyebiliriz. Duyduklarımız karşısında verdiğimiz tepki tetiklenen metodlar olabilir. Yazıyı bu benzetme ile okuduğunuzda her şey daha net oturacaktır.

Bir classtan, bir veya birden çok classın metodunu ya da metodlarını tetikleyeceksem belki de bununla birlikte veri göndereceksem notification kullanabilirim.

Belki bu cümle ilk okuyuşta karışık geldi ancak notification’ları özetleyebildiğim güzel bir cümle oldu, yazı bittikten sonra tekrar okuyalım 😊

NSNotificationCenter, bir uygulamanın herhangi bir bölümünün, başka bir bölümünden gelen değişiklikleri bilmesi için merkez sağlar. Center’a kaydolan nesneler notification aracılığı ile tetiklenir.

Nesneler addObserver metodu ile Center’a kaydolur, kayıt sırasında hangi notification ile tetiklenebileceği bilgisini de Center’a verir. Sonrasında Notification Center’dan gönderilen notification, onu bekleyen nesneleri tetikler. Ve tetiklemeden sonra istenen olaylar gerçekleştirilir. Bu sırada veri de gönderilebilir.

Notification Center yönetim merkezimiz, tetiklenecek olanlar nesnelerimiz, tetiklemeyi sağlayacak olan da Notificationlardır.

Her uygulamanın varsayılan notification center’ı bulunmaktadır. Bu center’a dinleyici ekleyebilir, silebiliriz. Ve yine center üzerinden tetikleyici bir notification gönderebiliriz.

Bu senaryoda B View Controller’ından A View Controller’ının arkaplan rengini notification göndererek tetiklediğimiz bir metod sayesinde değiştireceğiz.

Öncelikle boş bir swift dosyası açıyoruz. Ve static olarak NotificationA isminde bir notification oluşturuyoruz.

Extension Notification Name

Tetiklemek istediğimiz sınıf A olduğu için, A dinleyiciye sahip olacak, B ise notification gönderen class olacak. Öncelikle A class’ının dinleyici olmasını sağlayalım, tetiklendiği anda hangi işlemi gerçekleştireceğini de belirtelim.

Default olan notification center’ı alıyor, addObserver metodu ile dinleyici ekliyorum. Selector parametresiyle tetiklenecek olan metodu belirtiyorum. Name parametresine tetikleyecek notification’ı veriyorum. Veri aktarımı ile işim olmadığı için object parametresini nil geçiyorum.

changeBackgroundColor metodu tetikleme sonrasında çalışacak metodum. Bununla da view’in arkaplan rengini değiştirmek istediğimi belirtmişim.

Şimdi B’den A’yı tetiklemek için post metodu ile beklenen notification’ı gönderelim. Yine veriler aktarımı olmadığı için object parametresini nil geçiyorum. Ve tüm ekleme, silme, notification gönderme işlemlerini default notification center üzerinden gerçekleştiriyorum.

Bu şekilde B classındaki metoda tıklandığı anda, B classında notification center üzerinden notificationA isminde bir notification gönderilecek ve bu notification’ı dinleyen her nesne tetiklediği görevi aktif edecektir. Bu senaryoda da A classının arkaplan rengi değişecek.

Eğer aynı notification’ı dinleyen birden fazla class olsaydı durum aşağıdaki gibi olurdu.

Notification gönderen: C

Notification dinleyenler: A ve B

B’nin notification ile tetiklediği işlem: arkaplanının sarı olması

A’nın notification ile tetiklediği işlem: arkaplanının turuncu olması

Peki bir radyo kanalını birden fazla insan dinleyebilir mi? Tabii ki evet. Peki ya bir insan aynı anda birden fazla radyo kanalı dinleyebilir mi? Neden olmasın? 💃

Sonraki yazımda sistemin notification’larını ve onları dinleyerek aksiyon almayı anlatacağım, aklınıza takılan sorular için yorum bırakabilirsiniz, okuduğunuz için teşekkürler ☄☄☄☄☄☄☄☄

Delegate notification ve block aynı işleri yapabilmesine rağmen hangi tip sorunlarda hangisinin kullanılması avantajlıdır karşılaştırması bir başka yazı konusu olabileceği için buraya sığmamış olsa da, o zamana dek daha doğru yönlendirici olması adına aldığım güzel bir açıklamayı aşağıda belirtiyorum.

NSNotification ise direkt delegesi ve ilişkisi belli olmayan durumlarda kullanılır. Örneğin uygulamanın arka plana atılması bir delege methodu değil bir NSNotification tetikler. Çünkü bu notification’u kimlerin nerede kullanacağı önceden bilinmez. Direkt objeler arası bağlarda ise delege methodları kullanılır. Delege methodları kullanılabilecek durumda NSNotification kullanılmamalıdır.

Bu geri bildirim için Abdurrahman Şanlı’ya teşekkür ederim. 😊

--

--