There is no such guarantee and, in fact, it causes some subtle errors when using KVO (and bindings on OS X).
You can easily see it in action by creating an object that registers [NSThread currentThread] during init and dealloc , then runs the code, for example:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { Testing *testing = [[Testing alloc] init]; dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0), ^{ NSLog(@"Use testing in background: %@", testing); }); testing = nil; return YES; }
source share