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"];
});
}];声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: swift3.0 data转String 打印输出
- 下一篇:没有了
