Discards all pending notifications of the receiver
by dequeuing the receiver from the observer queue
returned by
-observerQueue
. Subclasses should invoke this method in thier dealloc
implementations.
Returns the EOObserverPriority of the receiver.
EODelayedObserver returns
EOObserverPriorityThird by default.
Subclasses can override this method to return
the corresponding priority.
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
EODelayedObserverQueue manages the
delayed observer notifications for
EODelayedObserver
that register with it. A delayed observer may only
register itself with one queue and a fixed
priority. Upon
[-notifyObserversUpToPriority:]
all enqueued observers are sent
[EODelayedObserver -subjectChanged]
according to the EOObserverPriority of the observer. The first time an observer is enqueued with [-enqueueObserver:]
(with a priority other than EOObserverPriorityImmediate) the queue registers itself with the NSRunLoop currentRunLoop with EOFlushDelayedObserverRunLoopOrdering to invoke [-notifyObserversUpToPriority:]
with EOObserverPrioritySixth. In general this mechanism is used by
EOAssociation
subclasses and in part
EODisplayGroup
or even
EOEditingContext
.
Registers the observer with the
receiver so that it will dispatch
[EODelayedObserver -subjectChanged]
either immediately, if the observers priority is EOObserverPriorityImmediate, or for the next invocation of -notifyObserversUpToPriority:
. If this method is invoked during the processing of -notifyObserversUpToPriority:
, then the dispatch will be enqueue for the current processing.
Upon the first invocation within a run loop, this
method registers a callback method to have
[-notifyObserversUpToPriority:]
invoked with EOObserverPrioritySixth with the
NSRunLoop currentRunLoop with
EOFlushDelayedObserverRunLoopOrdering
and the receivers run loop modes.
The observer is not retained and should be
removed from the receiver with
[-dequeueObserver:]
during the EODelayedObservers
NSObject dealloc method.
Dispatches registered observer notifications
by sending
[EODelayedObserver -subjectChanged]
to all registered observers of the receiver. During the processing new enqueObserver: methods will be honored. It is up toe the callers to ensure no loops result.
This method is invoked automatically with
EOObserverPrioritySixth during
each run loop after an invocation of
-enqueueObserver:
.
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
This is the central coordinating class of the change
tracking system of EOControl. It manages the
observers
<EOObserving>
and the objects to be observed. No instances of this class should be needed or created. All methods for coordinating the tracking mechanism are class methods.
Adds the observer to be notified with a
[<EOObserving>-objectWillChange:]
on the first of consecutive [NSObject -willChange]
methods invoked on the object.
This does not retain the object. It is
the observers responsibility to unregister the
object with
[+removeObserver:forObject:]
before the object ceases to exist. The
observer is also not retained. It is the
observers responsibility to unregister before
it ceases to exist.
Both observer and object
equality are considered equal through pointer
equality, so an observer observing
multiple objects considered
isEqual: will recieve multiple
observer notifications, objects
considered isEqual: may contain
different sets of observers, and an
object can have multiple observers
considered isEqual:.
This method is invoked from
[NSObject -willChange]
to dispatch
[<EOObserving>-objectWillChange:]
to all observers registered to observe object. This method records the last object it was invoked with so that subsequent invocations with the same object get ignored. Invoke this method with nil as the object to insure that the new changes will be forwarded to the observer. The observer notification can be suppressed with invocations of [+suppressObserverNotification]
which must be paired up with invocations of [+enableObserverNotification]
before they are dispatched again.
Returns an array of observers that have been
registered of object. Note that this
class is considered 'final' and that for efficiency
the observers are accessed directly internally, thus
overriding this method could lead to unexpected
results. In other words, if you must subclass then
you should override all methods that access the
internal map if this method is overridden to use a
different store.
This is a convenience class which is initialized with a
target, an action method and a priority, to have the
action method invoked on the target when the
subjectChanged method is invoked by the
EODelayedObserverQueue.
Initializes the receiver to dispatch
action to target upon
processing
-subjectChanged
. The receiver uses priority for the
EODelayedObserverQueue
. Target is not retained.
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
Warning the underscore at the start of the
name of this instance variable indicates that, even
though it is not technically private, it is
intended for internal use within the package, and
you should not use the variable in other code.
This is the hook to allow observers to be notified
that the state of the receiver is about to change. The
method should be called in all mutating accessor
methods before the state of the receiver changes.
This method invokes
[EOObserverCenter +notifyObserversObjectWillChange:]
with the receiver. It is responsible for invoking [<EOObserving>-objectWillChange:]
for all corresponding observers.