Почему документация Apple показывает только свойства и сигнатуры методов, но не фактический код?

Я изучаю документацию Apple и хотел бы понять, как такие классы, как UIApplication, выполняют то, что делают внутри, однако, если вы нажмете команду "UIApplication", Xcode покажет только свойства UIApplication и сигнатуры методов, но не фактический код внутри методов. Я подумал, что это было бы ценной информацией, чтобы узнать, можем ли мы увидеть, что происходит внутри предоставленных 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 }
}

1 ответ

Решение

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

API на вики

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

РЕДАКТИРОВАТЬ:

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

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

Другие вопросы по тегам