NSFastEnumeration

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

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


@interface NSArray<__covariant ObjectType> : NSObject 


协议是个什么鬼

看代码,只包含了下边这一个方法和一个结构体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类,实现协议

Dog.h
@interface Dog : NSObject
@end
Dog.m

你可能感兴趣的:(NSFastEnumeration)