2016-08-10 2 views
0

ich die Automagic von @UIApplicationMain versuchen zu verstehen, und wie der Beginn eines iOS-App in Bezug auf Java zu visualisieren:Ist dieses Java eine gute Annäherung an die Funktionsweise von @UIApplicationMain in Swift?

public class UIApplication extends UIResponder implements Runnable { 
    final UIApplicationDelegate appDel; 
    public UIApplication(UIApplicationDelegate appDel) { 
     this.appDel = appDel; 
    } 

    public static void main(String[] args) { 
     try { 
      UIApplication app = new UIApplication(new AppDelegate()); 

      handThisReferenceToOperatingSystem(app); 
      iOSdoesSomethingLikeThis(new Thread(app).start());  
     } catch(Exception e) { e.printStackTrace(); } 
    } 

    public void run() { 
     // chill-out and wait for iOS to invoke methods in UIResponder class. 
     // The UIResponder methods invoke my custom methods in AppDelegate. 
    } 

      public static class AppDelegate implements UIApplicationDelegate { 
       public void application(Object UIApplication) { // app specific behaviour 
       } 
       public void applicationWillResignActive(Object UIApplication) { // app specific behaviour 
       } 
       public void applicationDidEnterBackground(Object UIApplication) { // app specific behaviour 
       } 
       public void applicationWillEnterForeground(Object UIApplication) { // app specific behaviour 
       } 
       public void applicationDidBecomeActive(Object UIApplication) { // app specific behaviour 
       } 
       public void applicationWillTerminate(Object UIApplication) { // app specific behaviour 
       } 
       // maybe more methods from the UIApplicationDelegate 
      } 

      public interface UIApplicationDelegate { 
       void application(Object UIApplication); 
       void applicationWillResignActive(Object UIApplication); 
       void applicationDidEnterBackground(Object UIApplication); 
       void applicationWillEnterForeground(Object UIApplication); 
       void applicationDidBecomeActive(Object UIApplication); 
       void applicationWillTerminate(Object UIApplication); 
       // maybe some more methods .... 
      } 
} 

public class UIResponder { 
    void fingerSwipe() { // default implementation 
    } 
    void verticalMotion() { // default implementation 
    } 
    // more methods iOS might invoke 
} 

Also im Grunde macht das @UIApplicationMain Attribut auf die AppDelegate Klasse Anwendung aller andere Code weggehen, oder?

Antwort

0

Schauen Sie sich diese Antwort: https://stackoverflow.com/a/24516329/335974

Der Kern ist, dass es die main.m Datei in Objective-C-Projekten gefunden erzeugt:

int main(int argc, char *argv[]) { 
    @autoreleasepool { 
     NSString *appDelegateClassName = @"AppDelegate"; 

     return UIApplicationMain(argc, argv, nil, appDelegateClassName); 
    } 
} 

Code sieht also Ihre Java wie im Baseballstadion von dem, was passiert.

+0

Wenn ich abstrakt über Software denke und über "was ist los" denke ich in Java. Ich kann Ihre Referenz sehen, aber es "klickt" nicht, weil ich mit anderen Sprachen nicht vertraut bin. –

+0

Es erstellt nur die 'public static void main (String [] args)' für Sie und übergibt Ihr 'AppDelegate' an die' UIApplicationMain', welche die Framework-Klasse ist, die die App startet und Ihren Delegaten an bestimmten Punkten aufruft. –

Verwandte Themen