-[NSNotificationCenter rac_addObserverForName:object:]
sonsuz bir sinyal verir: bu, bu amaç için bir yöntem vardır. Sen
NSNotificationCenter.defaultCenter()
.rac_addObserverForName(UIKeyboardWillShowNotification, object: nil)
.takeUntil(self.rac_willDeallocSignal())
.subscribeNext { (_) in
print("Notification received")
}
Bu sinyal sonsuz belirtildiği gibi
[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil]
takeUntil:[self rac_willDeallocSignal]]
subscribeNext:^(id x) {
NSLog(@"Notification received");
}];
Swift bu
Amaç-c gibi ona abone olabilirler. Eğer self
ömrü için bağlayıcı olduğunu bu sinyal/abonelik gerekiyorsa böyle rac_willDeallocSignal
ile takeUntil:
ekleyebilirsiniz:
Amaç-c
[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil]
takeUntil:[self rac_willDeallocSignal]]
subscribeNext:^(id x) {
NSLog(@"Notification received");
}];
Swift
NSNotificationCenter.defaultCenter()
.rac_addObserverForName(UIKeyboardWillShowNotification, object: nil)
.takeUntil(self.rac_willDeallocSignal())
.subscribeNext { (_) in
print("Notification received")
}
Bu kesinlikle işe yarıyor gibi görünüyor. Fakat eğer böyle yapılması gerekiyorsa, bu yöntem temelde kusurludur. Sinyaller, onlara referans olana kadar yaşar. Sinyal serbest bırakılırsa, o zaman gözetleyiciyi kaldırır. Kodunuzda etrafınıza bakabilir, sinyali serbest bırakılmasını engelleyen sinyalin güçlü bir referansı olabilir. Ya da durum böyle değilse, lütfen benim düşüncemde beklenen davranış olmadığı için projeye bir sorun bildirin. – allprog
@allprog [Aboneler sinyallerini korur] (https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/Documentation/MemoryManagement.md) tamamlanma, hata veya bertaraf edilene kadar. Bu yüzden sonsuz sinyaller oldukça gnarly olabilir. '-takeUntil:' belirli bir noktada sinyali deterministik olarak sonlandıran iyi bir çözüm veya benzer bir şeydir. –
@ JustinSpahr-Summers Açıklama için teşekkürler. Kurt atmak için çok hevesli olduğumu biliyordum! Ama beni düzeltmek için oradasın. :) Belgeler bu incelikleri içerebiliyor mu? Örneğin. "bu sonsuz bir sinyaldir" ve birisinin dikkate alması gerekenleri gösteren bir açıklamaya işaret eder. Dürüst olacağım, çerçeve bu "bubi tuzaklarından" birine sahip gibi görünüyor ve bu durumlarda iade edilen sinyalin özellikleri vurgulandığında daha iyi olurdu. – allprog