Objektum orientált memória kezelés

A kérdésem az lenne, hogy mikor kell használni weak illetve strong változókat block esetében.
Találtam a neten egy kódot, ami megoldja automatikusan a weak illetve strong formálást.
Tehát itt egy valós kódrészlet:

// 1
@weakify(self)

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperationWithBlock: ^{
	@strongify(self);
	ValamiDocument *document = [ValamiDocument documentWithID: self.document.ID];
	UIImage *image = [... create image ...];
	ValamiPanel *viewController = [self.storyboard instantiateViewControllerWithIdentifier: @"ValamiPanelController"];

	// 2
	@weakify(document, viewController);

	[viewController setImage: image];
	[viewController setOnRectChanged: ^(CGRect rect) {
		@strongify(document);
		[document setRect: rect];
		[document save];
		NSLog(@"save");
	}];
	[viewController setOnInfoChanged: ^(NSDictionary *info, BOOL needSave) {
		@strongify(document);
		[document setInfo: info];
		if (needSave) {
			[document save];
			NSLog(@"save");
		}
	}];

	[[NSOperationQueue mainQueue] addOperationWithBlock:^{
		@strongify(self, document, viewController);
		[viewController setDocumentRect: document.rect];
		[self.navigationController pushViewController: viewController animated: YES];
	}];
}];

Szóval a kérdésem az lenne, hogy ebben a kódrészletben az AddOperationWithBlock az rögtön lefut. Ilyenkor is kell a @weakify(self) (1-es megjeyzés)? Mert ha nem, akkor gondolom egyik @strongify(self) sem kell… Bár igazából ez a kódrészlet nem futhat le újra csak amikor már felszabadult bezárom az ablakot. És akkor gondolom a második megjegyzésnél lécő viewCotnroller-hez sem kell weakify az előbbi okok miatt…?
A setOnRectChanged és setOnInfoChanged többször meghívódhat, és ott emiatt kell a document weakify és strongify. Jól gondolom?

És végezetül nem tudna-e esetleg segíteni elmagyarázni pontosan mi történik a strong weak unretained stb property meghatározásakor?

Sőt, ahogy próbálgatom a kódot egyszerűen nem menti el a dokumentumot, ha weak-re állítom a document változót.
Akkor lehet, hogy oda sem kell, azaz a weak csak akkor kell, ha ismétlődően hívódik meg egy block és abban egy isntance egy property-jét használom fel?