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 打印输出
- 下一篇:没有了