2015-08-26 1 views
0

Я новичок в разработке ios и начал кодирование с быстрым, и у меня есть основной вопрос относительно NSOject, и я не смог найти удовлетворительного ответа.Неоднозначность использования NSObject?

Мой вопрос, если мы создаем новый класс, является обязательным, что класс должен наследовать от корневого класса фундамента (т.е.), NSObject или не является обязательным, как сейчас у нас есть swift файл шаблон в xcode.

import UIKit 

class Myclass: NSObject { 

} 

или

import UIKit 

    class Myclass { // where here myclass is the base class 

    } 

Любая помощь будет оценена ...

ответ

3

Существует немало различий между использованием и использованием NSObject.

Jasper Blues написал nice explanation, что за и против использования NSObject.

Короче говоря:

подклассов NSObject в Swift получает вас Objective-C гибкость во время выполнения, но и производительность Objective-C. Избегание NSObject может повысить производительность, если вам не нужна гибкость Objective-C.

1

Дополнительно.

Из документации на https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.html

Swift классы не наследуют от универсального базового класса. Определяемые вами классы без указания суперкласса автоматически становятся базовыми классами для вас.

2

Вам не нужно наследовать NSObject. Однако вы можете наследовать от NSObject, если хотите определенные функции времени исполнения. Например, если вы хотите использовать KVO (Key Value Observing), или вы хотите сделать несколько более продвинутых вещей, таких как метод swizzling.

В общем, я бы рекомендовал не наследовать от NSObject, если вы не найдете требуемую им проблему.

2

Вышеуказанные ответы верны, но есть много случаев, когда вам может понадобиться/хотите наследовать от NSObject в любом случае. @Мистер. Бердсли упомянул пару. Я бы добавил, что если вы взаимодействуете с API-интерфейсами Cocoa/Cocoa Touch или многими другими фреймворками Apple, вы можете наследовать от NSObject по ряду причин совместимости.

Например, если вы хотите, чтобы ваш класс, чтобы соответствовать протоколу NSCoding, или любой из стандартных делегатов или исходных данных протоколов (например, UITableViewDataSource, например), то вы сэкономите массу неприятностей, унаследовав от NSObject. Я согласен с советом не наследовать, если вам это не нужно, но я нахожу, что это часто необходимо при работе с API Apple.