2017-12-07 3 views
1

지금 당장은 Git의 Insomnia라는 클래스를 사용하여 장치가 충전되는 동안 잠금을 방지하려고합니다. 궁금한 점이 있으시면 project 여기에 있습니다. 예제 코드를 들어, 내가이 일을 가지고 : 당신이 볼 수 있듯이AppDelegate 클래스를 신속하게 'final'로 선언하는 것은 나쁜 습관입니까?

final class AppDelegate: UIResponder, UIApplicationDelegate { 
     private let insomnia = Insomnia(mode: .whenCharging) 
     //app delegate code 
} 

, 그것은 insomnia 변수가 해제되지 않도록 당신이 작업을 중지 것이다, finalAppDelegate를 선언 있습니다. 그러나 확실하지 않았습니다. AppDelegatefinal으로 선언하는 것은 나쁜 습관입니까? 아니면 내 애플 리케이션에 문제가 발생합니까? 나쁜 습관 인 경우 insomnia이 할당 해제되지 않도록하는 더 좋은 방법이 있습니까?

+0

그럼 '최종'이라고 선언 할 필요가 없습니까? – LFHS

+0

awesome, thanks – LFHS

+0

프로젝트를 보면,'final'을 사용하면'불면증'변수가 할당 해제되는 것을 막을 수 있다고 주장하지 않습니다. 그게 당신 자신의 결론 인 것 같습니다, 맞습니까? – rmaddy

답변

4

당신 말 : 당신이 볼 수 있듯이

, 그것은 당신이 AppDelegatefinal로 선언이 때문에 insomnia 변수가 해제되지 않았는지 ...

final는하지 않습니다 무엇

. 클래스가 하위 클래스로 분류 될 수 없다는 것만을 말합니다 (이는 앱 대리자의 경우 관련성이 적음). final 키워드는 또한 일부 최적화 (이 메서드 중 하나를 호출하는 코드에서 동적 디스패치 대신 정적 디스패치를 ​​사용할 수있는 경우)를 허용하며이 시나리오에서는 관찰 가능한 효과가 거의 없습니다.

결론 아래와 같은 문맥에서는 final을 사용할 필요가 없습니다.

"우수 사례"는 final을 사용해야 할 것입니다. 즉, 클래스가 실제로 서브 클래 싱되지 못하거나 서브 클래 싱되지 않아야하는 곳 또는 정적 디스패치가 제공하는 성능 차이가 필요한 부분을 사용해야합니다.


insomnia을 선언 수용 가능한 장소인지 여부를 귀하의 질문에, 그래 그것이 된 답변

(하지만 필요 없음 final). AppDelegate은 앱이 실행되는 동안 출시되지 않으며 일반적으로 "앱 수명주기"관련 코드를 저장합니다.

관련 문제