2017-05-05 1 views
0

을 유지나는 다른 회사에서 프로젝트를 인수하고 변수에 값을 할당 할 때 나는 종종 코드의이 부분을 참조주기 문제

블록은 암시 적으로 "자체"를 유지합니다. 이것이 의도 된 행동임을 나타 내기 위해 명시 적으로 "자기"를 언급하십시오.

이 내부 블록은 실제로 보유주기를 생성합니까? 그렇지 않다면, 왜? 누군가 정교 할 수 있습니까?

+0

왜 블록을 즉시 실행하려면 만드시겠습니까? – newacct

+0

@newacct 필자는 가독성을 향상시키고 (블록 범위를 벗어나는) 객체의 변경 가능성을 줄이기 위해 이러한 방식으로 설계되었다고 생각합니다. 블록은 주로 5보다 많은 LoC를 포함합니다. – Neru

답변

4

예제에는주기가 없습니다.

블록은 표현식을 평가하는 동안 만들어진 값이며 즉시 적용되어 BOOL 값을 생성합니다.

상황이 비정상적인 경우 동일한 표현식에 즉시 적용 할 블록을 만드는 경우 블록을 다른 방법으로 직접 전달하거나 로컬 변수에 저장하고 변수 값을 전달하여 비슷한 상황이 발생합니다 - 사이클이 생성되지 않습니다.

대신 동일한 블록을 생성하지만, 예를 변수 ( 하지 지역 변수), 다음 self는 블록이 self을 참조 할 것, 블록을 참조 할 것, 그리고 당신이주기를했을로 저장합니다. 그 자체가 나쁘지는 않습니다. 순환이 끊어지지 않으면 누출이 발생합니다. 그러나 인스턴스 변수에 다른 값을 쓰는 것과 같이주기가 깨지는 경우에는 절대로 문제가되지 않습니다.

HTH

관련 문제