동맹 공유 패널 메모리 유출
장애 설명:
FBRetainCycleDetector에서 컨트롤러에 메모리 유출이 감지됨
솔루션:
차례차례 조사를 통해 자신이 쓴 Block 혐의를 배제한 후 목표는 동맹 공유 패널의 Block에 고정되었다. 동맹의 Block은 내부에서 사용하는 대상에 대해 강제로 인용(모든 Block이 할 수 있다), 내부 대상은 직접 또는 간접적으로 동맹의 Block(구체적 인용이 확정되지 않았다)을 강제로 인용했다. Block 내부에서 인용된 대상을 모두 weak로 수식한 후에 문제가 해결되었다.
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
//
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
messageObject.text = [NSString stringWithFormat:@"%@",appName];
messageObject.text = modelWeak.shareImg;//
//
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:selfWeak completion:^(id data, NSError *error) { //
if (error) {
NSLog(@"************Share fail with error %@*********",error);
}else{
NSLog(@"response data is %@",data);
}
}];
}];
보충:
Block은 안의 모든 대상에 대해 강력한 인용을 할 것이다. 순환 인용을 깨는 관건은 내부의 대상이 Block에 대해 직접적이거나 간접적으로 강한 인용을 했는지 확인하는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.