__weak、__unsafe_unretained方式解决循环引用示意图
__block方式解决循环引用示意图
代码实例
typedef void (^TBBlock) (void);
@interface TBPerson : NSObject
@property (nonatomic, copy) TBBlock block;
@end
@implementation TBPerson
- (void)dealloc{
NSLog(@"%@ -- dealloc",self);
}
@end
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self personBlcok11];
[self personBlock12];
}
- (void)personBlcok1{
TBPerson *person = [[TBPerson alloc] init];
person.block = ^{
NSLog(@"%p",person);
};
}
- (void)personBlcok11{
TBPerson *person = [[TBPerson alloc] init];
__weak TBPerson *weakPerson1 = person;
__unsafe_unretained TBPerson *weakPerson2 = person;
person.block = ^{
NSLog(@"%p",weakPerson1);
NSLog(@"%p",weakPerson2);
};
}
- (void)personBlock12{
__block TBPerson *person1 = [[TBPerson alloc] init];
person1.block = ^{
person1 = nil;
};
person1.block();
}
@end
PS 此文为学习 李明杰 老师的 iOS底层原理课程 所写笔记