「@UIApplicationMain」とはどういう意味ですか?


82

私は最初のSwiftプロジェクトを作成しましたAppDelegate.swiftが、クラス宣言の上に行があります-なぜそこにあるのですか?!

...
import UIKit
import CoreData

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

回答:


134

@UIApplicationMainSwiftの属性はmain.m、Objective-Cプロジェクトにある些細なファイルを置き換えます(その目的はmain、すべてのCプログラムのエントリポイントである関数を実装し、UIApplicationMainし、Cocoa Touchの実行ループとアプリインフラストラクチャを開始するためにことです)。

Objective-Cでは、UIApplicationMain関数が提供するアプリごとの構成の主な(heh)ビットは、アプリのカスタムクラスの1つを共有UIApplicationオブジェクトのデリゲートとして指定することです。Swiftでは、クラスの宣言に属性を追加することで@UIApplicationMainこのクラスを簡単に指定できます。(UIApplicationMain理由がある場合は、関数を直接呼び出すこともできます。Swiftでは、その呼び出しをmain.swiftファイルの最上位コードに入れます。)

@UIApplicationMainiOS専用です。OS Xでは、アプリデリゲートは従来Info.plistで指定されたメインペン先ファイルに設定されます(SwiftでもObjCと同じ)が、OS Xストーリーボードにはメインペン先ファイルがないため@NSApplicationMain、同じことが行われます。


1
Swiftプログラミング言語の58ページで、「属性」セクションが興味深いと思いました。
ヤノス2014

1
私の答えでドキュメントを引用したと思いますが、この属性についてはまだ何もないようです。属性あなたはおそらくどこが見つかったページがあるでしょうそれを見つけます。
rickster 2014


2
最後の文について、OSXには同等の@NSApplicationMainがあることに注意してください
Bill

@UIApplicationMainはtvOS用でもあります
ShakedSayag19年

7

@UIApplicationMain属性は、アプリケーションを起動するためのmain.mファイルとエントリポイントの代わりになります。

この@UIApplicationMainがなくてもプログラムが機能するもう1つのことは、コメント// @ UIApplicationMain`がObjectivecの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

@StuFFmcこの情報に感謝します。sendEventメソッドも呼び出されません。
dellos 2015

2
Foundationインポートは、FLApplication任意のサブクラスの使用を宣言することなく、ランダムなサブクラスは...申し訳ありませんが、この答えのどれも最初の文を除き、意味がありません。
エフェマー2018

7

AppDelegate.swiftのソースファイルには、2つの主要な機能があります。

  • アプリへのエントリポイントと、入力イベントをアプリに配信する実行ループを作成します。この作業は、ファイルの先頭に表示されるUIApplicationMain 属性(@UIApplicationMain)によって実行されます。UIApplicationMainは、アプリのライフサイクルの管理を担当するアプリケーションオブジェクトとアプリデリゲートオブジェクトを作成します。

  • これは、アプリデリゲートオブジェクトの青写真であるAppDelegateクラスを定義します。アプリデリゲートは、アプリのコンテンツが描画されるウィンドウを作成し、アプリ内の状態遷移に応答する場所を提供します。AppDelegateクラスは、カスタムアプリレベルのコードを記述する場所です。


ねえ@Manju ....... UIApplicationメインをTimerUiApplicationとしてオーバーライドしました.............変数があります..........どうすればよいですか.....................私のUIViewControllerからの私のUIApplicationの変数を修正
満腹

3

Swiftのドキュメントが更新されたので、関連する箇所は次のとおりです。

NSApplicationMain

この属性をクラスに適用して、それがアプリケーションデリゲートであることを示します。この属性を使用することは、NSApplicationMain( :)関数を呼び出し、このクラスの名前をデリゲートクラスの名前として渡すことと同じです。

この属性を使用しない場合は、main.swiftファイルにNSApplicationMain( :)関数を呼び出すmain()関数を指定してください。たとえば、アプリが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.