문제

나는 블록을 객체 속성으로 보유하는 클래스를 가지고 있습니다.

@property (nonatomic, readwrite, copy) SFFailureBlock failureBlock;
.

여기서 sffailureblock :

typedef void (^SFFailureBlock)(NSError *error);
.

나는 또한 오브젝트 속성 (afhttpRequeToperation)으로 선언되고, 완료되면 실패 블록을 호출하기를 원한다.

    [self.operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    __weak NSError *error = [NSError errorWithDomain:@"com.test" code:100 userInfo:@{@"description": @"zero results"}];
    failureBlock(error);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"nothing");
}];
.

이 블록에서 "캡처"를 강력하게 "캡처"한 경고를 얻습니다. "나는 인터넷을 수색했지만 이것이 보유주기로 이어지는 이유에 대한 괜찮은 솔루션을 찾을 수 없었습니다.나는 어느 곳에서나 블록 내부에서 '자기'를 부르지 않는다.

또 다른 이상한 것은 내가 'self.failureblock (오류)'을 작성한다면 컴파일러가 나에게 어떤 경고를주지 않는다는 것입니다!

아무도 나에게 무슨 일이 일어나고 있는지 설명 할 수 있습니까?나는 아크 메모리 관리 규칙에서 진지하게 누락되어야하지만, 나는 그것을 알아낼 수 없다.

도움이 되었습니까?

해결책

작업의 블록의 "실패 블록"을 참조하면 "Self-> FareuleBlock"을 실제로 수행하고 있으므로 암시 적으로 자아를 유지합니다.당신이 할 수있는 일은 자동 변수 sffailureblock xfailureblock= 실패 블록을 생성하는 것입니다.솔직전 위의 경우 블록에서 사용하십시오.[다시, 해당 블록 내부의 셀프 -> 참조를 피하고 싶습니다.]

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top