This topic shows best practice for using references to self
from within completion blocks.
To avoid retain cycles, the reference to the object being used inside a completion block must be weak. Therefore, outside of the block do the following:
__weak <YourClassName> *weakSelf = self;
Inside the block use the reference to the object as follows:
[weakself doSomething];
The following example illustrates this technique:
__weak DocumentViewController *weakSelf = self;
[self.documentService retrieveRenditionOfNode:self.document renditionName:kAlfrescoThumbnailRendition
completionBlock:^(AlfrescoContentFile *contentFile, NSError *error)
{
if (nil != contentFile)
{
NSData *data = [[NSFileManager defaultManager] contentsAtPath:[contentFile.fileUrl path]];
weakSelf.thumbnail = [UIImage imageWithData:data];
[weakSelf.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationNone];
}}];