標籤:
1、block是控制器對象的一個屬性,則在block內部使用self將會引起迴圈應用
typedef void(^TestBlock)();@interface SecondViewController ()@property (nonatomic, copy)TestBlock testBlock;@endself.testBlock = ^() { NSLog(@"%@",self.mapView); }; self.testBlock();
2、把block內部抽出一個作為self的方法,當使用weakSelf調用這個方法,並且這個方法裡有self的屬性,block不會造成記憶體泄露
self.testBlock = ^(){ [weakSelf test];};-(void)test{ NSLog(@"%@",self.mapView);}
3、當block不是self的屬性時,block內部使用self也不會造成記憶體泄露
TestBlock testBlock = ^(){ NSLog(@"%@",self.mapView);};[self test:testBlock];
4、當使用方法有block作為參數使用時,block內部使用self也不會造成記憶體泄露
- (void)viewDidLoad { [super viewDidLoad]; [self getData:^(NSString *str){ NSLog(@"%@----%@", self, str); }]; [[self class] getData:^(NSString *str) { NSLog(@"類方法--%@---%@", self, str); }];}- (void)getData:(SuccessBlock)success{ if (success) { success(@"success"); }}+ (void)getData:(SuccessBlock)success{ if (success) { success(@"success"); }}
iOS中block循環參考問題