CGPoint center = CGPointZero; CGPoint (^pointAddHandler)(CGPoint addPoint) = ^(CGPoint addPoint) { return CGPointMake(center.x + addPoint.x, center.y + addPoint.y);}center = CGPointMake(100, 100);NSLog(@"%@", pointAddHandler(CGPointMake(10, 10))); //输出{10,10}循环引用
开头说过,block在iOS开发中被视作是对象,因此其生命周期会一直等到持有者的生命周期结束了才会结束。另一方面,由于block捕获变量的机制,使得持有block的对象也可能被block持有,从而形成循环引用,导致两者都不能被释放:
@implementation LXDObject{ void (^_cycleReferenceBlock)(void);}- (void)viewDidLoad{ [super viewDidLoad]; _cycleReferenceBlock = ^{ NSLog(@"%@", self); //引发循环引用 };}@end__weak typeof(*&self) weakSelf = self;_cycleReferenceBlock = ^{ NSLog(@"%@", weakSelf); //弱指针引用,不会造成循环引用};原文:http://www.cnblogs.com/coolcold/p/7273126.html