There was a topic about this here:
but for me it’s still unclear.
I need to observe a lot of entities (face loops) which in case of huge models may be even thousands of entities.
I have one global observer instance which is responsible for processing of all events.
And now, if I use this snippet:
unless @observer = nil
object.remove_observer @observer
object.add_observer @observer
end
First initialization (entity doesn’t contains my observer and “remove_observer” returns false) everything work quite fast - adding observers takes less than a second in case of huge model.
But if I try to reinitialize observers (some of entities may have had an observer before) remove_observer take a lot of time - even 20 seconds in case of huge model.
I tried to ‘add_observer’ multiple times (same observer instance) on entity and I saw that I get only one event per entity (it doesn’t matter how many times I added the observer instance).
Even more, multiple adding of the same observer instance, always gives me ‘true’ as a result of ‘add_observer’ but only first execution of ‘remove_observer’ returns true.
object.add_observer @observer #returns true
object.add_observer @observer #returns trueobject.remove_observer @observer #returns true
object.remove_observer @observer #returns false
1). Could anyone explain how properly add/remove observers?
(SU Team: Could you share a bit of knowledge - how it works under the hood)
2). Is it safe to multiple adding of same observer instance?
(SU Team: the documentation in RubyAPI is very poor - maybe a few more sentences should appear under “add_observer” method)
3). Why removing observer instance taking so much time?