UIView的动画block不会造成循环引用的原因就是,这是个类方法,当前控制器不可能强引用一个类,所以循环无法形成。
不需要,之所以需要弱引用本身,是因为怕对象之间产生循环引用,引起程序的崩溃!
所谓“引用循环”是指双向的强引用,所以那些“单向的强引用”(block 强引用 self )没有问题,比如这些:
1. [UIView animateWithDuration:duration animations:^{
[self.superview layoutIfNeeded];
}];
2. [[NSOperationQueue mainQueue] addOperationWithBlock:^{
self.someProperty = xyz;
}];
3. [[NSNotificationCenter defaultCenter] addObserverForName:@"someNotification"
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification * notification) {
self.someProperty = xyz;
}];