Skip to content

Instantly share code, notes, and snippets.

@andersio
Created June 4, 2016 08:32
Show Gist options
  • Save andersio/4e3792668958e99f8705fed8db3d2a9c to your computer and use it in GitHub Desktop.
Save andersio/4e3792668958e99f8705fed8db3d2a9c to your computer and use it in GitHub Desktop.
diff --git a/ReactiveCocoa/Swift/Signal.swift b/ReactiveCocoa/Swift/Signal.swift
index 5e628eb..17b0d96 100644
--- a/ReactiveCocoa/Swift/Signal.swift
+++ b/ReactiveCocoa/Swift/Signal.swift
@@ -84,11 +84,7 @@ public final class Signal<Value, Error: ErrorType> {
}
deinit {
- atomicObservers.withValue { observers in
- if let observers = observers where observers.isEmpty {
- generatorDisposable.dispose()
- }
- }
+ generatorDisposable.dispose()
}
/// A Signal that never sends any events to its observers.
@@ -146,15 +142,17 @@ public final class Signal<Value, Error: ErrorType> {
}
if let token = token {
- return ActionDisposable { [atomicObservers, generatorDisposable, weak self] in
+ var strongSelf = Optional(self)
+ return ActionDisposable { [generatorDisposable, weak self] in
var shouldDisposeSignal = false
- atomicObservers.modify { observers in
+ strongSelf!.atomicObservers.modify { observers in
guard var observers = observers else {
return nil
}
observers.removeValueForToken(token)
+ strongSelf = nil
shouldDisposeSignal = observers.isEmpty && self == nil
return observers
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment