이 코드를 사용하여 tableView의 표시/소실을 지연시키고 있습니다.Swift에서 타이머를 사용하여 "변수에 쓰여졌지만 읽지 않음"을 피하는 방법
var timer = NSTimer()
let delay = 0.5
timer = NSTimer.scheduledTimerWithTimeInterval(delay, target: self, selector: #selector(delayedHideTableView), userInfo: nil, repeats: false) // Warning: Variable 'timer' was written to, but never read
아마도 내가 타이머 변수에 문제가 있습니다. 어떻게이 오류를 피할 수 있습니까? print (timer) 문을 사용할 수는 있지만 최선의 방법이라고 생각하지는 않습니다.
'NSTimer' 따라서, 목표는 유지 (및 런 루프 타이머를 보유) 유지할'deinit 인 '타이머가 활성화되어있는 한 절대로 호출되지 않습니다. 객체 라이프 사이클의 적절한 시간에'invalidate()'를 수동으로 호출해야합니다. 이 경우 OP의 타이머가 반복되지 않기 때문에 대상은 해고 될 때까지만 유지됩니다. – Hamish
흥미롭게도, 나는 반복 된 타이머에서 많은 일을했지만, 반복되지 않는 타이머에서는 거의 작동하지 않았습니다. 따라서이 상황에서 중요한지 확실하지 않습니다. 그냥 호기심, 타이머가 초기화 된 다음 superview에서 tableView가 어떻게 든 제거되면 타이머가 해고되면 문제가 발생합니까? tableView가 여전히 메모리에 있는지 여부. –
타이머는 활성 상태 인 동안 대상을 계속 유지하므로 주어진 대상에 대한 참조가없는 경우에도 타이머가 유지합니다. 말하자면, deallocat (ed/ing) 객체에 대해 메소드를 호출하여 발생할 수있는 문제를 방지하는 것입니다. 이 문제를 피할 방법을 찾고 있다면'CFRunLoopTimer'을 살펴보십시오 - 이것은 타겟과 셀렉터가 아닌 콜백으로서 클로저를 취할 수 있습니다. – Hamish