2015-06-21 1 views
1

Вот мой пример, скажем, у меня есть обычай UIView с водопроводная жест распознаватель, который реагирует на эту функцию:Являются ли публичные быстрые функции объектами ObjC динамически или статически отправлены?

func handleTap(tap: UITapGestureRecognizer) { 
    println("Tap!") 
} 

Я вообще предпочитаю, чтобы они были частными, поэтому я пометить его как таковой, но это не делает Работа. @objc или dynamic спецификатор требуется, например, так:

dynamic private func handleTap(tap: UITapGestureRecognizer) { 
    println("Tap!") 
} 

Это заставляет меня верить, что общественные функции являются динамическими по умолчанию при добавлении к Objective-C объект. Это так? Просьба привести ссылки, если они найдены.

ответ

2

Свифта компилятора попытается доказать, что вызов методы может только заканчиваются единой реализацией. Если это может быть доказано, то он будет использовать статическую и не динамическую отправку. Использование ключевого слова «final» или «private», а также оптимизация всего модуля помогут с этим.

2

От Using Swift with Cocoa and Objective-C:

Требования динамической диспетчеризации

Хотя @objc атрибут выставляет свой Swift API для среды выполнения Objective-C, это не гарантирует динамические отправку имущества, метод, индекс или инициализатор. Компилятор Swift может по-прежнему девиртуализировать или использовать входящий член для оптимизации производительности вашего кода, минуя время выполнения Objective-C. Когда вы отмечаете объявление члена с помощью динамического модификатора, обращайтесь к , чтобы этот элемент всегда динамически отправлялся. Поскольку декларации отмеченных динамический модификатор посланы с помощью выполнения Objective-C, они неявно отмечены @objc атрибута.»

+0

Я думаю, что это говорит больше о добавлении динамической диспетчеризации к родному api Swift. Мой вопрос больше связан с подклассом Swift суперкласса Objective-C. Если это так, то, возможно, я не понимаю. Не могли бы вы уточнить? – Logan

+0

Я считаю, что ответ Грега Паркера на http://stackoverflow.com/questions/24057525/swift-native-base-class-or-nsobject поможет – sbooth

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