I have a question regarding memory deallocation and blocks/closures. 

Following is the Swift method

```
    self!.dismissViewControllerAnimated(false, completion: {
        println(self);
     })

```

Or the objective C method

```
   [self dismissViewControllerAnimated:NO completion:^{
       NSLog("%@",self);
   }];

```

I would really appreciate if anyone could explain when in the above method self would be deallocated . Is it after the completion block is run or before that? I understand its taken care by ARC but I would like to know if self gets release message in the completion block or after that. Hence, if I do some minor clean up in the completion block (accessing self), is that safe/acceptable or not?