NSSecureCoding
Приспосабливание протоколу NSSecureCoding указывает, что объект обрабатывает кодирование и декодирование экземпляров себя способом, который устойчив против объектных атак замены.
Исторически, много классов декодировали экземпляры себя как это:
Swift
if let object = decoder.decodeObjectForKey("myKey") as MyClass {
...succeeds...
} else {
...fail...
}
Objective C
id obj = [decoder decodeObjectForKey:@"myKey"];
if (![obj isKindOfClass:[MyClass class]]) {...fail...}
Этот метод потенциально небезопасен, потому что к тому времени, когда можно проверить тип класса, объект был уже создан, и если это - часть класса набора, потенциально вставленного в граф объектов.
Для приспосабливания NSSecureCoding
:
Не переопределяющий объект
initWithCoder:
может соответствоватьNSSecureCoding
без любых изменений (предполагающий, что это - подкласс другого класса, соответствующего).Действительно переопределяющий объект
initWithCoder:
должен декодировать любые вложенные объекты с помощьюdecodeObjectOfClass:forKey:
метод. Например:Swift
let obj = decoder.decodeObjectOfClass(MyClass.self, forKey: "myKey")
Objective C
id obj = [decoder decodeObjectOfClass:[MyClass class]
forKey:@"myKey"];
Кроме того, класс должен переопределить
supportsSecureCoding
метод для возвратаYES
true
.
Для получения дополнительной информации о том, как это касается API NSXPC, посмотрите Creating XPC Services в Руководстве по программированию Демонов и Служб.
Наследование
Не применимый
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.8 и позже.
-
Возвраты, поддерживает ли класс безопасное кодирование. (требуемый)
Объявление
Swift
class func supportsSecureCoding() -> Bool
Objective C
+ (BOOL)supportsSecureCoding
Возвращаемое значение
Возвратиться
YES
true
если Ваш класс поддерживает безопасное кодирование, илиNO
false
иначе.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.8 и позже.