1
var label1: UILabel? = UILabel()
weak var label2 = label1
label1 = nil
여기에 약간의 혼동이다 : 이 3 개 선 후, LABEL1이 전무하지만, 여전히 참조가 라벨 2. 내 이해에서, 약한이기 때문에 그것은 nil이어야한다. 그래서 그것은 참조의 강한 파악을 가지지 않을 것이다.스위프트 약한 참조 혼란
왜이 기능이 작동하지 않습니까?
또 다른 질문 : 인터넷 요청 콜백에서
func request() { [weak self] complete in
guard let strongSelf = self else { return }
strongSelf.printSomething()
strongSelf.doSomething()
}
, 내가 약한 자기를 지정하고 가드는 자기가 해제되지 않은 경우는 성공 것입니다 있는지 확인하기 위해 strongSelf을 가지고. 문제는 가드가 지나간 후 줄이 풀리면 자아가 다른 곳에서 할당이 해제되면 강해지겠습니까? 그것은 자기 자신을 강하게지지하고 있습니까? (? 자기의 메모리가 해제되지 않도록 자체로 하나의 참조 카운트를 추가)
레이블을보기에 추가 했습니까? 그렇다면, 뷰는 그것에 대한 강한 참조를 가질 것이므로, label2는'nil'이되지 않을 것입니다. 귀하의 다른 질문에 대한 대답에서 예'strongSelf'는 객체가 출시되는 것을 막을 것입니다 – Paulw11
@ Paulw11 아니요, 놀이터에서 첫 번째 테스트를했는데 코드의 3 줄 밖에 없었습니다. 레이블은보기에 삽입되지 않습니다. 다시 두 번째 대답은 강한 자체가 약한 자기에게 참조 횟수 +1을 더하여 잘 될 것이라는 것을 의미합니까? –
당신은 이런 종류의 물건에 놀이터를 신뢰할 수 없습니다. 실제 애플 리케이션에서 테스트 – Paulw11