我知道...這個話題還有一個問題。但我真的不明白。對象的完成塊 - 保留週期?
我的代碼:
//MyViewController.h
@property (strong, nonatomic) UIPageViewController *pageViewController;
//MyViewController.m
- (void)setViewControllerForIndex:(NSInteger)index {
[self.pageViewController setViewControllers:_myViewControllers[index]
direction:UIPageViewControllerNavigationDirectionForward
animated:animated
completion:^(BOOL finished){
[self updatedViewControllerTo:index]; //this method is doing a lot of stuff
}];
}
難道我有一個現在保留週期? self
正在完成塊中被捕獲,並且self
對pageViewController
有很強的參考,因此間接地我有一個保留週期?
我必須在完成塊中使用__weak MyViewController *weakSelf
語句並使用weakSelf
嗎?
或者:即使我有保留週期,它有什麼關係嗎?當塊完成時,塊中的所有對象將被釋放,因此保留週期(或對自身的強引用)也將被釋放?
方法updatedViewControllerTo:
也在做UI更改。所以這個方法必須被調用。當我使用weakSelf
時,是否必須在塊中創建self
的強引用? (參考http://masteringios.com/blog/2014/03/06/avoid-strong-reference-cycles/的最後一個代碼塊)。