Link
Conclusion
It's best to remove it when you don't need it.
If it is not particularly harsh, you can write directly in the dealloc function. Because dealloc the function is bound to be called.
deallocpossible problems removing in a function
Because dealloc Runloop it will be called at the end. If Runloop a notification arrives before the call, it can cause unpredictable problems.
For example, a VC is pop out, due to network delays and other reasons, in the same Runloop , a notification is thrown, then the VC will receive this pop notification. If a function that responds to notifications operates on a single instance within an app, the status of this singleton is not correct.
IOS9 no need to remove notifications in the future
dealloc .
?
Forgetting to remove the observer is the reason why the crash happened.
Time to remove notifications