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

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

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

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


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

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

@interface ljADWebViewController () 
{
}
@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 () 
{
    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 () 
{
    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"];
        });
    }];




你可能感兴趣的:(iOS block中的全局变量释放问题)