NSFastEnumeration

今天看了个alibaba的开源库coobjc,看到了代码中使用了实现NSFastEnumeration协议的类进行for循环,顿时懵逼,嗯,现在是要把它搞懂

Enumeration: 列举
仔细看一下iOS的NSArray,其中就实现了NSFastEnumeration协议


@interface NSArray<__covariant ObjectType> : NSObject 
<NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration>

<NSFastEnumeration>协议是个什么鬼

看代码,只包含了下边这一个方法和一个结构体NSFastEnumerationState


typedef struct {
    unsigned long state;
    id __unsafe_unretained _Nullable * _Nullable itemsPtr;
    unsigned long * _Nullable mutationsPtr;
    unsigned long extra[5];
} NSFastEnumerationState;

@protocol NSFastEnumeration
- (NSUInteger)countByEnumeratingWithState:
(NSFastEnumerationState *)state 
objects:(id __unsafe_unretained _Nullable [_Nonnull])buffer 
count:(NSUInteger)len;

@end

经过测试,每次进行for...in循环的时候,会自动调这个方法,那么这个方法是做什么的呢

下面进行测试,打印log

新建一个Dog类,实现<NSFastEnumeration>协议

Dog.h
@interface Dog : NSObject<NSFastEnumeration>
@end
Dog.m

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。