美文网首页iOS
iOS中的非正式协议是什么?

iOS中的非正式协议是什么?

作者: 喔牛慢慢爬 | 来源:发表于2021-11-03 15:22 被阅读0次
    简介:

    在IOS2之前是没有引入@protocol协议的,IOS2之前实现协议主要是通过给NSObject添加Category类别扩展的方式。这种方式相对于iOS2之后引入的@protocol来说就叫做非正式协议。非正式协议都是以NSObjectCategory的方式实现的。所以所有基于NSObject的子类都可以使用定义的非正式协议。对于@Protocol来说编译器会在编译期检查语法错误,而非正式协议则不会检查是否实现。

    示例:

    NSKeyValueCoding.h中的NSKeyValueCoding就是KVC(Key Value Coding)使用的一个非正式协议

    @interface NSObject(NSKeyValueCoding)
    @property (class, readonly) BOOL accessInstanceVariablesDirectly;
    - (nullable id)valueForKey:(NSString *)key;
    - (void)setValue:(nullable id)value forKey:(NSString *)key;
    - (BOOL)validateValue:(inout id _Nullable * _Nonnull)ioValue forKey:(NSString *)inKey error:(out NSError **)outError;
    - (NSMutableArray *)mutableArrayValueForKey:(NSString *)key;
    - (NSMutableOrderedSet *)mutableOrderedSetValueForKey:(NSString *)key;
    - (NSMutableSet *)mutableSetValueForKey:(NSString *)key;
    - (nullable id)valueForKeyPath:(NSString *)keyPath;
    - (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;
    - (BOOL)validateValue:(inout id _Nullable * _Nonnull)ioValue forKeyPath:(NSString *)inKeyPath error:(out NSError **)outError;
    - (NSMutableArray *)mutableArrayValueForKeyPath:(NSString *)keyPath;
    - (NSMutableOrderedSet *)mutableOrderedSetValueForKeyPath:(NSString *)keyPath;
    - (NSMutableSet *)mutableSetValueForKeyPath:(NSString *)keyPath;
    - (nullable id)valueForUndefinedKey:(NSString *)key;
    - (void)setValue:(nullable id)value forUndefinedKey:(NSString *)key;
    - (void)setNilValueForKey:(NSString *)key;
    - (NSDictionary<NSString *, id> *)dictionaryWithValuesForKeys:(NSArray<NSString *> *)keys;
    - (void)setValuesForKeysWithDictionary:(NSDictionary<NSString *, id> *)keyedValues;
    @end
    

    相关文章

      网友评论

        本文标题:iOS中的非正式协议是什么?

        本文链接:https://www.haomeiwen.com/subject/hjcczltx.html