나는 ARC를 사용하여 응용 프로그램을 작성 중이며 다음과 같은 문제가 발생하는지 궁금합니다. 특히, 나는 'A'라는 객체를 만들고, GCD를 사용하여 코드 블록을 주 스레드의 큐에 추가하고 코드 블록에서 객체에 대한 약한 참조에 대해 몇 가지 연산을 수행합니다. 그러나 코드 블록이 실행될 때까지는 객체가 이미 무효화되었습니다. 코드 블록에는 객체에 대한 약한 참조 만 있기 때문에 문제가 발생합니까? 아니면 컴파일러는 어떻게 든 내 코드 블록이 실행될 때 필요하기 때문에 객체에 대한 참조를 유지해야한다는 것을 알고 있습니까?그랜드 센트럴 디스패치 코드 블록
Foo *A = [[Foo alloc] init];
__weak Foo *weakA = A;
dispatch_async(dispatch_get_main_queue(), ^{
//...do something here with weakA
});
A = nil;
고마워요!
내가 말할 것입니다. 빌드하고 실행하십시오!여기서 대답을 기다리는 대신 시도해보십시오. 새 프로젝트를 만들고 그 부분 만하십시오. – Novarg
'Foo' 앞에'__block'을 추가하십시오. –