iOS基础·OC高级篇iOS Developer

iOS-17-系统的动画block中的block为什么不用弱引用

2017-02-23  本文已影响97人  小东门儿

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; 
}];
上一篇下一篇

猜你喜欢

热点阅读