I have a UIViewController which is pushed onto a UINavigationController. Inside the view controller, i do downloading some data from internet. It may take a long time. The problem is that : If i use NSInvocationOperation to download the data on another thread (which is what i prefer to do), and then i tap the 'back' button to pop the view controller out, the 'dealloc' of the view controller is not called. Only when the downloading finishes, the 'dealloc' is called. This is quite strange to me, as i've read the documentation about UIViewController and there's nothing that can explain this. Anyone can explain for me ? Thanks in advance.