initialize()
은 클래스가 첫 번째 메시지 (UserDefaults 등 설정)를 보내기 전에 코드를 실행하는 데 일반적으로 사용됩니다.AppDelegate에서 초기화 무시 - 여러 번 실행되는 코드로부터 보호
: 문서는 슈퍼 클래스 '구현은 여러 번 서브 클래스
initialize()
을 무시하고initialize()
여러 번 호출 될 경우 여러 번 코드를 더 실행에서 클래스를 보호하는 방법의 예를주지 않는다 호출 할 수 있음을 명시 하위 클래스가initialize()
을 구현하지 않으면 수퍼 클래스 구현이 여러 번 호출 될 수 있습니다. 런타임은 상속 된 구현을 호출하거나 서브 클래스가 명시 적으로[super initialize]
을 호출하는 경우 여러 번 호출 될 수 있습니다. 당신이 실행 여러 번되는로부터 자신을 보호하려는 경우, 당신은이 라인을 따라 구현을 구성 할 수 있습니다 : 내 AppDelegate에의initialize()
을 무시하고 두 번 이상 실행 가진 코드를 방지하기 위해 노력하고+ (void)initialize { if (self == [ClassName self]) { // ... do the initialization ... } }
. self is AppDelegate.Type
이 항상 true로 평가되는지 (그리고 Xcode에서 나에게 경고를 주는지) 점검 할 때, 클래스 검사는 나에게 이해가 가지 않는다.
우리가 수퍼 클래스가 아니기 때문에 클래스 검사가 적용되지 않습니다 (AppDelegate
의 수퍼 클래스는 UIResponder
임)? 오버라이드 된 initialize()
메서드의 내용은 super
을 호출하거나 클래스 검사를 수행하지 않고 한 번만 실행됩니까?
'is' 대신'==='를 사용하면'AppDelegate'의 서브 클래스에 대해 true를 반환하지 않을 것이라고 생각합니다. – dan
@dan 흠, 나는 참조를 비교하는 것을 고려하지 않았다. 이는 또한 좋은 선택이며 서브 클래스를 보호합니다. 답변으로 게시해야합니다. – JAL
또는'if self == AppDelegate.self'. 그러나 AppDelegate의 하위 클래스를 만들지 않으면 해당 검사가 필요 없습니다. –