2016-08-31 2 views
-2

Я изучаю документацию Apple и хотел бы понять, как классы, такие как UIApplication, делают то, что они делают под капотом, однако, если вы укажете команду «UIApplication», Xcode показывает только свойства и сигнатуры свойств UIApplication, но не фактический код внутри методов , Я полагал, что это будет ценной информацией, чтобы знать, можем ли мы видеть, что происходит внутри предлагаемых классов Apple, но почему это не доступно нам для ознакомления или просмотра?Почему в документации Apple отображаются только свойства и сигнатуры методов, но не фактический код?

Например, вот что отображается, если команда нажмите UIApplication:

public class UIApplication : UIResponder { 

    public class func sharedApplication() -> UIApplication 

    unowned(unsafe) public var delegate: UIApplicationDelegate? 

    public func beginIgnoringInteractionEvents() // nested. set should be set during animations & transitions to ignore touch and other events 
    public func endIgnoringInteractionEvents() 
    public func isIgnoringInteractionEvents() -> Bool // returns YES if we are at least one deep in ignoring events 

    public var idleTimerDisabled: Bool // default is NO 

    public func openURL(url: NSURL) -> Bool 
    @available(iOS 3.0, *) 
    public func canOpenURL(url: NSURL) -> Bool 

    public func sendEvent(event: UIEvent) 

    public var keyWindow: UIWindow? { get } 
    public var windows: [UIWindow] { get } 

    public func sendAction(action: Selector, to target: AnyObject?, from sender: AnyObject?, forEvent event: UIEvent?) -> Bool 

    public var networkActivityIndicatorVisible: Bool // showing network spinning gear in status bar. default is NO 

    // default is UIStatusBarStyleDefault 

    // The system only calls this method if the application delegate has not 
    // implemented the delegate equivalent. It returns the orientations specified by 
    // the application's info.plist. If no supported interface orientations were 
    // specified it will return UIInterfaceOrientationMaskAll on an iPad and 
    // UIInterfaceOrientationMaskAllButUpsideDown on a phone. The return value 
    // should be one of the UIInterfaceOrientationMask values which indicates the 
    // orientations supported by this application. 
    @available(iOS 6.0, *) 
    public func supportedInterfaceOrientationsForWindow(window: UIWindow?) -> UIInterfaceOrientationMask 

    public var statusBarOrientationAnimationDuration: NSTimeInterval { get } // Returns the animation duration for the status bar during a 90 degree orientation change. It should be doubled for a 180 degree orientation change. 
    public var statusBarFrame: CGRect { get } // returns CGRectZero if the status bar is hidden 

    public var applicationIconBadgeNumber: Int // set to 0 to hide. default is 0. In iOS 8.0 and later, your application must register for user notifications using -[UIApplication registerUserNotificationSettings:] before being able to set the icon badge. 

    @available(iOS 3.0, *) 
    public var applicationSupportsShakeToEdit: Bool 

    @available(iOS 4.0, *) 
    public var applicationState: UIApplicationState { get } 
    @available(iOS 4.0, *) 
    public var backgroundTimeRemaining: NSTimeInterval { get } 

    @available(iOS 4.0, *) 
    public func beginBackgroundTaskWithExpirationHandler(handler: (() -> Void)?) -> UIBackgroundTaskIdentifier 
    @available(iOS 7.0, *) 
    public func beginBackgroundTaskWithName(taskName: String?, expirationHandler handler: (() -> Void)?) -> UIBackgroundTaskIdentifier 
    @available(iOS 4.0, *) 
    public func endBackgroundTask(identifier: UIBackgroundTaskIdentifier) 

    /*! The system guarantees that it will not wake up your application for a background fetch more 
     frequently than the interval provided. Set to UIApplicationBackgroundFetchIntervalMinimum to be 
     woken as frequently as the system desires, or to UIApplicationBackgroundFetchIntervalNever (the 
     default) to never be woken for a background fetch. 

     This setter will have no effect unless your application has the "fetch" 
     UIBackgroundMode. See the UIApplicationDelegate method 
     `application:performFetchWithCompletionHandler:` for more. */ 
    @available(iOS 7.0, *) 
    public func setMinimumBackgroundFetchInterval(minimumBackgroundFetchInterval: NSTimeInterval) 

    /*! When background refresh is available for an application, it may launched or resumed in the background to handle significant 
     location changes, remote notifications, background fetches, etc. Observe UIApplicationBackgroundRefreshStatusDidChangeNotification to 
     be notified of changes. */ 
    @available(iOS 7.0, *) 
    public var backgroundRefreshStatus: UIBackgroundRefreshStatus { get } 

    @available(iOS 4.0, *) 
    public var protectedDataAvailable: Bool { get } 

    @available(iOS 5.0, *) 
    public var userInterfaceLayoutDirection: UIUserInterfaceLayoutDirection { get } 

    // Return the size category 
    @available(iOS 7.0, *) 
    public var preferredContentSizeCategory: String { get } 
} 
+5

Я голосую, чтобы закрыть этот вопрос не по теме, потому что единственным источником, который мог бы ответить на этот вопрос, является производитель программного обеспечения (то есть Apple), и даже тогда их ответ будет субъективным. – dasblinkenlight

+0

@ dasblinkenlight хорошо, как можно узнать, правильно ли они используют методы или свойства? Имеет ли мой вопрос к вам смысл? Я просто пытаюсь быть уверенным, что понимаю, правильно ли я использовал классы Apple. Когда вы говорите субъективно, что способ говорить о программировании - это скорее искусство с бесконечными ответами? –

+1

@ dasblinkenlight любой может ответить на этот вопрос, нет ничего конкретного Apple или субъективного об этом. – Lope

ответ

3

Это обычная практика, когда предоставление кому-то с API для вашего продукта (в данном случае SDKs компании Apple). Детали реализации зависят от создателя, и вам не нужно знать, как все работает внутри. Все, что вам нужно знать, это инструменты, которые позволят работать с их продуктом, и эти инструменты называются API.

API on wiki

Реализация сама может и часто меняет и API разработан таким образом, что эти изменения не будут нарушать или сломать приложение. Наблюдение за кодом может привести к неправильным предположениям и/или плохой практике. Не говоря уже о том, что он часто является частным и не предназначен для общественных глаз.

EDIT:

Вы не связаны с реализацией, потому что вы не один писать. Apple создает реализацию, вы просто используете то, что они делают за кулисами.

Например, возьмите метод beginIgnoringInteractionEvents. Вы не знаете, что именно происходит, когда вы это называете. Все, что вы знаете, это то, что как только вы его назовете, вы перестанете получать события взаимодействия. Если сделать это, просто установив для некоторого внутреннего свойства checkForEvents значение false или удалив обработчик из списка обработчиков, или они воссоздают всю иерархию представлений, они полностью прозрачны для вас. Вам не нужно беспокоиться о внутренних компонентах, вам просто нужно знать, что делает метод/свойство, и это зависит от Apple, чтобы гарантировать, что это сдержит свое обещание (и вы будете разочаровываться время от времени, когда вы столкнетесь с ошибка в поведении)

+0

Итак, в простых условиях, можно ли с уверенностью согласиться с тем, что API Apple - это как кубики для куки cookie, которые мы можем использовать до тех пор, пока мы соблюдаем его параметры и возвращаем типы при вызове методов или свойств класса, которые мы хотим использовать? Таким образом, реализация несколько свободно до нас, чтобы создать, пока мы соблюдаем параметры и типы возврата?<<< Я просто изо всех сил пытался получить эту последнюю мысль, просто в поисках некоторой ясности здесь. –

+1

не совсем, см. Мое редактирование для уточнения – Lope

Смежные вопросы