实验代码:
- (void)testLocalObj
{
NSObject* localObject = [[NSObject alloc] init];
printf("localObject address out block: %p\n", localObject);
void (^TestBlock)(void) = ^{
printf("localObject address in block: %p\n", localObject);
};
localObject = nil;
TestBlock();
}
- (void)testBlockObj
{
__block NSObject* blockObject = [[NSObject alloc] init];
printf("blockObject address out block: %p\n", blockObject);
void (^TestBlock)(void) = ^{
printf("blockObject address in block: %p\n", blockObject);
};
blockObject = nil;
TestBlock();
}
- (void)testWeakObj
{
NSObject* object = [[NSObject alloc] init];
__weak NSObject *weakObject = object;
printf("weakObject address out block: %p\n", weakObject);
void (^TestBlock)(void) = ^{
printf("weakObject address in block: %p\n", weakObject);
};
object = nil;
TestBlock();
}
输出结果:
localObject address out block: 0x8f5cfd0
localObject address in block: 0x8f5cfd0
blockObject address out block: 0x8f5cfd0
blockObject address in block: 0x0
weakObject address out block: 0x8f5cfd0
weakObject address in block: 0x0