동맹 공유 패널 메모리 유출

1244 단어

장애 설명:


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에 대해 직접적이거나 간접적으로 강한 인용을 했는지 확인하는 것이다.

좋은 웹페이지 즐겨찾기