"@UIApplicationMain"은 무엇을 의미합니까?


82

방금 첫 번째 Swift 프로젝트를 만들었습니다 AppDelegate.swift. 클래스 선언 위에 줄이 있습니다. 왜 거기에 있습니까?!

...
import UIKit
import CoreData

@UIApplicationMain // <- WHY IS IT HERE?
class AppDelegate: UIResponder, UIApplicationDelegate {
... 

답변:


134

@UIApplicationMainSwift 의 속성은 main.mObjective-C 프로젝트에서 발견 된 사소한 파일을 대체합니다 (목적은 main모든 C 프로그램의 진입 점 인 함수 를 구현 UIApplicationMain하고 Cocoa Touch 실행 루프 및 앱 인프라를 시작하는 호출입니다 ).

Objective-C에서 UIApplicationMain함수가 제공 하는 앱별 구성의 주요 (heh) 비트는 앱의 사용자 지정 클래스 중 하나를 공유 UIApplication개체 의 대리자로 지정하는 것입니다 . 스위프트, 당신은 쉽게 추가하여이 클래스를 지정할 수 있습니다 속성을 이 클래스의 선언. ( 이유가 있다면 함수를 직접 호출 할 수도 있습니다 . Swift에서는 해당 호출을 파일의 최상위 코드에 넣습니다 .)@UIApplicationMainUIApplicationMainmain.swift

@UIApplicationMainiOS 전용입니다. OS X에서 앱 델리게이트는 전통적으로 Info.plist (Swift의 경우 ObjC와 동일)에서 지정한 기본 nib 파일에 설정되어 있지만 OS X 스토리 보드에는 기본 nib 파일이 없으므로 @NSApplicationMain동일한 작업이 수행됩니다.


1
The Swift Programming Language의 58 페이지에서 흥미로운 속성 섹션을 찾았습니다.
János

1
내 대답에 문서를 인용했지만 아직이 속성에 대한 문서가없는 것 같습니다. 특성 아마 당신은 어디에서 찾을 페이지는 그것을 찾을 수 있습니다.
rickster

3
에 대한 설명 UIApplicationMain이 있습니다. developer.apple.com/library/ios/documentation/Swift/Conceptual/...
퀸 테일러

2
마지막 문장으로, OS X에는 동등한 @NSApplicationMain이 있습니다
Bill

@UIApplicationMain는 tvOS 위해도
진탕 Sayag

7

@UIApplicationMain 속성은 main.m 파일 및 응용 프로그램을 시작할 진입 점을 대체합니다.

이 @UIApplicationMain없이 프로그램이 작동 할 수있는 또 하나의 일은 // @ UIApplicationMain` 객관적인 c에서 main.m과 동일한 main.swift를 생성하고 아래 코드를 작성하는 것입니다. 그것은 당신의 응용 프로그램의 시작점이 될 것입니다

import Foundation
class FLApplication: UIApplication
{
    override func sendEvent(event: UIEvent!)
    {
        println("Entry Point") // this is an example
    }
}

1
그렇게하면 컴파일되고 실행되지만 앱 설치 후 완료되고 sendEvent가 호출되지 않습니다. 그래서 뭐? :)
StuFF mc 2014 년

여기에 더 많은 정보 : stackoverflow.com/questions/24020000/… — 다시 나는 sendEvent에 착륙하지 않는다 ...
StuFF mc 2014 년

@StuFFmc이 정보에 감사드립니다. sendEvent 메서드도 나를 위해 호출되지 않았습니다.
dellos

2
Foundation수입은 FLApplication어떤 서브 클래스의 사용을 선언하지 않고 임의의 서브 클래스는 ... 미안하지만,이 답변의 아무도는 첫 문장을 제외하고 의미가 없습니다.
ephemer

7

AppDelegate.swift의 소스 파일은 두 가지 기본 기능이 있습니다 :

  • 앱에 대한 진입 점과 앱에 입력 이벤트를 전달하는 실행 루프를 만듭니다. 이 작업은 파일 상단에 나타나는 UIApplicationMain 속성 (@UIApplicationMain)에 의해 수행됩니다 . UIApplicationMain은 앱의 수명주기를 관리하는 애플리케이션 개체와 앱 대리자 개체를 만듭니다.

  • 앱 델리게이트 객체의 청사진 인 AppDelegate 클래스를 정의 합니다. 앱 대리자는 앱의 콘텐츠가 그려지는 창을 만들고 앱 내에서 상태 전환에 응답 할 수있는 위치를 제공합니다. AppDelegate 클래스는 사용자 지정 앱 수준 코드를 작성하는 곳입니다.


Hey @Manju ....... 내 UIApplication 메인을 TimerUiApplication으로 재정의했습니다 ............. 변수가 있습니다 .......... 어떻게합니까? 내 uiViewController에서 내 UIApplication의 변수를 수정합니다 ......................
Cloy

3

이제 Swift 문서가 업데이트되었으므로 다음은 관련 구절입니다.

NSApplicationMain

이 특성을 클래스에 적용하여 응용 프로그램 대리자임을 나타냅니다. 이 속성을 사용하는 것은 NSApplicationMain ( : :) 함수 를 호출 하고이 클래스의 이름을 델리게이트 클래스의 이름으로 전달하는 것과 같습니다 .

이 속성을 사용하지 않는 경우 NSApplicationMain ( : :) 함수 를 호출하는 main () 함수와 함께 main.swift 파일을 제공하십시오. 예를 들어 앱에서 NSApplication의 사용자 지정 하위 클래스를 주 클래스로 사용하는 경우이 특성을 사용하는 대신 NSApplicationMain 함수를 호출합니다.

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html


0

@UIApplicationMain은이 클래스 에 대한 자세한 정보를 제공하기 위해 AppDelegate 아래에 선언 된 클래스에 적용되는 속성 입니다.

이 경우 @UIApplicationMain 속성 은 AppDelegate 클래스 가 앱의 애플리케이션 위임 임을 나타냅니다 .


0

UIApplicationMain 이 특성을 클래스에 적용하여 응용 프로그램 대리자임을 나타냅니다. 이 속성을 사용하는 것은 UIApplicationMain 함수를 호출하고이 클래스의 이름을 델리게이트 클래스의 이름으로 전달하는 것과 같습니다. (출처)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.