 
 	disposable.addDisposable(propertyDisposable)
 
-	let signalDisposable = signal.observe(next: { value in
-		property.value = value
+	let signalDisposable = signal.observe(next: { [weak property] value in
+		property?.value = value
 		return
 	}, completed: {
 		disposable.dispose()

	/// KVO-compliant. Most UI controls are not!
	public var producer: SignalProducer<AnyObject?, NoError> {
		if let object = object {
			let objectWillDeallocProducer: SignalProducer<(), NoError> = object.rac_willDeallocSignal().toSignalProducer()
				|> catch { error in
					assert(false, "Received unexpected error from `rac_willDeallocSignal()`")
					return .empty
				}
				|> map{ $0 as! () }
			
			return object.rac_valuesForKeyPath(keyPath, observer: nil).toSignalProducer()
				// Errors aren't possible, but the compiler doesn't know that.
				|> catch { error in
					assert(false, "Received unexpected error from KVO signal: \(error)")
					return .empty
				}
				|> takeUntil(willDeallocProducer)
				|> takeUntil(objectWillDeallocProducer)
		} else {
			return .empty
		}

	public init(object: NSObject?, keyPath: String) {
		self.object = object
		self.keyPath = keyPath
	}
}

