더 나은 버전
__strong typeof(self) strongSelf = weakSelf;
블록의 첫 번째 줄로 약한 버전에 대한 강력한 참조를 작성하십시오. 블록이 실행을 시작하고 nil로 다시 떨어지지 않았을 때 self가 여전히 존재한다면,이 행은 블록의 실행 수명 동안 계속 유지되도록합니다.
따라서 모든 것이 다음과 같습니다.
// Establish the weak self reference
__weak typeof(self) weakSelf = self;
[player addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, 100)
queue:nil
usingBlock:^(CMTime time) {
// Establish the strong self reference
__strong typeof(self) strongSelf = weakSelf;
if (strongSelf) {
[strongSelf.timerDisp setText:[NSString stringWithFormat:@"%02d:%02d",min,current]];
} else {
// self doesn't exist
}
}];
이 기사를 여러 번 읽었습니다. Erica Sadun의 블록 및 NSNotificationCenter 사용시 문제를 피하는 방법 에
대한 훌륭한 기사입니다.
신속한 업데이트 :
예를 들어, 신속하게 성공 블록을 사용하는 간단한 방법은 다음과 같습니다.
func doSomeThingWithSuccessBlock(success: () -> ()) {
success()
}
이 메소드를 호출 self
하고 성공 블록에서 사용해야 할 때 . [weak self]
및 guard let
기능을 사용하겠습니다 .
doSomeThingWithSuccessBlock { [weak self] () -> () in
guard let strongSelf = self else { return }
strongSelf.gridCollectionView.reloadData()
}
이 소위 강약 댄스는 인기있는 오픈 소스 프로젝트에서 사용됩니다. Alamofire
.
자세한 내용은 신속한 스타일 가이드를 확인하십시오.
timerDisp
클래스의 속성은?