iOS

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

2021-11-03  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读