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метод для возвратаYEStrue.
Для получения дополнительной информации о том, как это касается API NSXPC, посмотрите Creating XPC Services в Руководстве по программированию Демонов и Служб.
Наследование
Не применимый
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.8 и позже.
-
Возвраты, поддерживает ли класс безопасное кодирование. (требуемый)
Объявление
Swift
class func supportsSecureCoding() -> BoolObjective C
+ (BOOL)supportsSecureCodingВозвращаемое значение
Возвратиться
YEStrueесли Ваш класс поддерживает безопасное кодирование, илиNOfalseиначе.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.8 и позже.
