У меня есть класс, и я использую его в качестве наблюдателя. Мне нужно, чтобы уведомить меня, когда другие объекты меняют свои свойства. Когда он освобождается, я не убираю наблюдателя. Однако я получаю ошибки, подобные этой:
An instance 0xf819680 of class **** was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:
Теперь я не понимаю, почему это может быть проблемой. Насколько я понимаю, КВО состоит в том, что если объект A хочет наблюдать объект B, то A сохраняет B, а затем
[B addObserver:A]; // shortened just to get the point across
и B НЕ сохраняют A, чтобы избежать цикла. Следовательно, если A освобождается, он должен удалить себя в качестве наблюдателя B, иначе B не будет иметь ссылки на то место, где раньше находился A (поскольку он NOT сохранил A).
Однако это предупреждение, по-видимому, подразумевает, что, если я освобожу B, случится что-то плохое. Единственное, что я могу себе представить, это то, что слабая ссылка на A, которую имеет B, исчезнет, и A просто не получит больше уведомлений. Я не знаю, как «информация наблюдений была просочилась». Если B уходит, почему информация о наблюдениях, которую он хранил, не уходит?