码迷,mamicode.com
首页 > 移动开发 > 详细

iOS中block循环引用问题

时间:2016-08-26 19:58:30      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

1、block是控制器对象的一个属性,则在block内部使用self将会引起循环应用

typedef void(^TestBlock)();
@interface SecondViewController ()
@property (nonatomic, copy)TestBlock testBlock;
@end

self.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循环引用问题

标签:

原文地址:http://www.cnblogs.com/czc-wjm/p/5811520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!