Что такое @NSApplicationMain в проекте быстрого программирования в xcode

Я создал образец проекта, используя Xcode 6 и язык как быстрый.

Xcode создал AppDelegate.swift со следующим кодом

import Cocoa

@NSApplicationMain

class AppDelegate: NSObject, NSApplicationDelegate {

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        // Insert code here to initialize your application
    }

    func applicationWillTerminate(aNotification: NSNotification) {
        // Insert code here to tear down your application
    }


}

Что означает @NSApplicationMain и где мой файл main.mm/main.m с main()?

Ответы

Ответ 1

Как упоминалось в примечаниях к выпуску:

Приложения OS X теперь могут применять атрибут @NSApplicationMain для своего класса делегирования приложений, чтобы создать неявную основную часть приложения. Этот атрибут работает так же, как атрибут @UIApplicationMain для приложений iOS.

Итак, в основном, это способ заставить ваше приложение загрузиться и работать без необходимости писать какой-либо шаблонный шаблон глобального уровня в отдельном файле Swift. В предыдущих версиях Xcode, когда вы создали новый проект Swift Cocoa, Xcode создаст файл main.swift для нового проекта OS X, который выглядит так:

import Cocoa

NSApplicationMain(Process.argc, Process.unsafeArgv)

И это была главная точка входа. Теперь Xcode не беспокоит создание этого файла; вместо этого он просто отмечает делегат вашего приложения с помощью @NSApplicationMain, и этот шаг начальной загрузки обрабатывается за кулисами.

Дополнительная информация из Язык быстрого программирования:

Применить этот атрибут к классу, чтобы указать, что он является делегатом приложения. Использование этого атрибута эквивалентно вызову функции NSApplicationMain и передаче этого имени класса в качестве имени класса делегата.

Если вы не используете этот атрибут, поставьте main.swift файл с функцией main, которая вызывает функцию NSApplicationMain. Например, если ваше приложение использует собственный подкласс NSApplication в качестве его основного класса, вызовите функцию NSApplicationMain вместо этого атрибута.