iOS block中的全局变量释放问题

经过测试第一种和第二种正确的写法,当页面离开时,都会进入下面的dealloc中。

而第三种错误的写法,当页面离开时,不会进入下面的dealloc中。

这就引出了。第一种和第二种写法正确性分析,简言之,他们都是self的属性,当self(当前页面消失时),他的属性变量也就跟着消失了,而不会出现不释放的情况。


- (void)dealloc
{
    _webView.delegate = nil;
    _webView = nil;
    CHDebugLog(@"webView页面已销毁");
}

第一种正确的写法:--页面会释放

@interface ljADWebViewController () <UIWebViewDelegate>
{
}
@property (nonatomic, copy)NSString* shareH5URL;
@property (nonatomic, copy)NSString* shareH5Title;
@property (nonatomic, copy)NSString* shareH5Content;

    @weakify(self);
    [my setShareValuesBlock:^(NSString *url) {
        @strongify(self);

        dispatch_async(dispatch_get_main_queue(), ^{
            NSDictionary *dic = [myUitle dictionaryWithJsonString:url];
            self.shareH5URL = [dic objectForKey:@"url"];
            self.shareH5Title = [dic objectForKey:@"title"];
            self.shareH5Content = [dic objectForKey:@"content"];
            [self rightButtonClick:nil];
        });
        
    }];

第二种正确写法--页面会释放

@interface ljADWebViewController () <UIWebViewDelegate>
{
    NSString* _shareURL;
    NSString* _shareTitle;
    NSString* _shareContent;
}

    @weakify(self);
    [my setShareValuesBlock:^(NSString *url)
 {
        @strongify(self);
        dispatch_async(dispatch_get_main_queue(), ^{
            //@strongify(self);
            NSDictionary *dic = [myUitle dictionaryWithJsonString:url];
            self->_shareURL = [dic objectForKey:@"url"];
             self->_shareTitle = [dic objectForKey:@"title"];
            self->_shareContent = [dic objectForKey:@"content"];
        });
    }];

3. 错误写法---页面不释放

@interface ljADWebViewController () <UIWebViewDelegate>
{
    NSString* _shareURL;
    NSString* _shareTitle;
    NSString* _shareContent;
}

    @weakify(self);
    [my setShareValuesBlock:^(NSString *url)
 {
        @strongify(self);
        dispatch_async(dispatch_get_main_queue(), ^{
            //@strongify(self);
            NSDictionary *dic = [myUitle dictionaryWithJsonString:url];
            _shareURL = [dic objectForKey:@"url"];
            _shareTitle = [dic objectForKey:@"title"];
            _shareContent = [dic objectForKey:@"content"];
        });
    }];




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值