iOS——NSArray
/* NSArray.h
Copyright (c) 1994-2015, Apple Inc. All rights reserved.
*/

#import <Foundation/NSObject.h>
#import <Foundation/NSEnumerator.h>
#import <Foundation/NSRange.h>
#import <Foundation/NSObjCRuntime.h>

@class NSData, NSIndexSet, NSString, NSURL;

/**************** Immutable Array ****************/

NS_ASSUME_NONNULL_BEGIN

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

@property(readonly)NSUIntegercount;
- (ObjectType)objectAtIndex:(NSUInteger)index;//获取数组中索引为index的元素
- (instancetype)initNS_DESIGNATED_INITIALIZER;
- (instancetype)initWithObjects:(constObjectType [])objects count:(NSUInteger)cntNS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder*)aDecoderNS_DESIGNATED_INITIALIZER;

@end

@interface NSArray<ObjectType> (NSExtendedArray)

- (NSArray<ObjectType> *)arrayByAddingObject:(ObjectType)anObject;//添加对象到数组最后一个元素
- (NSArray<ObjectType> *)arrayByAddingObjectsFromArray:(NSArray<ObjectType> *)otherArray;//将otherArray数组的元素添加到数组的末尾
- (NSString*)componentsJoinedByString:(NSString*)separator;//将数组元素用separator分隔符连接成一个字符串
- (BOOL)containsObject:(ObjectType)anObject;//判断数组中是否包含某个对象
@property(readonly,copy)NSString*description;
- (NSString *)descriptionWithLocale:(nullableid)locale;//遍历数组中的所有内容 将内容拼接成一个新的字符串返回
- (NSString *)descriptionWithLocale:(nullableid)locale indent:(NSUInteger)level;//获取第一个包含于另一个数组中的元素
- (nullableObjectType)firstObjectCommonWithArray:(NSArray<ObjectType> *)otherArray;
- (void)getObjects:(ObjectType__unsafe_unretained[])objects range:(NSRange)range;//将数组中一定范围的元素读取到一个C数组中 objects参数需要为分配好空间的C指针
- (NSUInteger)indexOfObject:(ObjectType)anObject;//得到对象anObject在数组中的索引
- (NSUInteger)indexOfObject:(ObjectType)anObject inRange:(NSRange)range;//获取某个范围内的元素的下标值
- (NSUInteger)indexOfObjectIdenticalTo:(ObjectType)anObject;//获取与给定元素相同的元素在数组中的最小下标值
- (NSUInteger)indexOfObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)range;//在一定范围内 获取与给定元素相同的元素在数组中的最小下标值
- (BOOL)isEqualToArray:(NSArray<ObjectType> *)otherArray;//判断两个数组是否相同
@property(nullable,nonatomic,readonly) ObjectType firstObjectNS_AVAILABLE(10_6,4_0);//获取数组中第一个元素
@property(nullable,nonatomic,readonly) ObjectType lastObject;//获取数组中最后一个元素
- (NSEnumerator<ObjectType> *)objectEnumerator;//得到数组的枚举对象
- (NSEnumerator<ObjectType> *)reverseObjectEnumerator;//得到数组的反序枚举对象
@property(readonly,copy)NSData*sortedArrayHint;
- (NSArray<ObjectType> *)sortedArrayUsingFunction:(NSInteger(*)(ObjectType, ObjectType, void * __nullable))comparator context:(nullablevoid*)context;
- (NSArray<ObjectType> *)sortedArrayUsingFunction:(NSInteger(*)(ObjectType, ObjectType, void * __nullable))comparator context:(nullablevoid*)context hint:(nullableNSData*)hint;
- (NSArray<ObjectType> *)sortedArrayUsingSelector:(SEL)comparator;//使用comparator比较方法对数组进行排序
- (NSArray<ObjectType> *)subarrayWithRange:(NSRange)range;//获取数组一定范围的子数组
- (BOOL)writeToFile:(NSString*)path atomically:(BOOL)useAuxiliaryFile;//将数组写入文件
- (BOOL)writeToURL:(NSURL*)url atomically:(BOOL)atomically;//将数组写入指定url路径
- (void)makeObjectsPerformSelector:(SEL)aSelectorNS_SWIFT_UNAVAILABLE("Use enumerateObjectsUsingBlock: or a for loop instead");//是数组中的所有元素调用某个方法选择器
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(nullableid)argumentNS_SWIFT_UNAVAILABLE("Use enumerateObjectsUsingBlock: or a for loop instead");//是数组中的所有元素调用某个方法选择器
- (NSArray<ObjectType> *)objectsAtIndexes:(NSIndexSet*)indexes;//获取一个下标集合所对应的元素
- (ObjectType)objectAtIndexedSubscript:(NSUInteger)idxNS_AVAILABLE(10_8,6_0);//数组的下标方法 子类重写
- (void)enumerateObjectsUsingBlock:(void(^)(ObjectType obj, NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6,4_0);//对数组中的元素进行枚举遍历
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void(^)(ObjectType obj,NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6,4_0);
- (void)enumerateObjectsAtIndexes:(NSIndexSet*)s options:(NSEnumerationOptions)opts usingBlock:(void(^)(ObjectType obj,NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6,4_0);
- (NSUInteger)indexOfObjectPassingTest:(BOOL(^)(ObjectType obj,NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);//通过遍历的方式查找符合条件的元素下标
- (NSUInteger)indexOfObjectWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL(^)(ObjectType obj,NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);
- (NSUInteger)indexOfObjectAtIndexes:(NSIndexSet*)s options:(NSEnumerationOptions)opts passingTest:(BOOL(^)(ObjectType obj,NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);
- (NSIndexSet*)indexesOfObjectsPassingTest:(BOOL(^)(ObjectType obj, NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);//通过遍历的方式查找所有符合条件的元素下标
- (NSIndexSet*)indexesOfObjectsWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL(^)(ObjectType obj,NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);
- (NSIndexSet*)indexesOfObjectsAtIndexes:(NSIndexSet*)s options:(NSEnumerationOptions)opts passingTest:(BOOL(^)(ObjectType obj,NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);
- (NSArray<ObjectType> *)sortedArrayUsingComparator:(NSComparator)cmptrNS_AVAILABLE(10_6,4_0);//通过block进行数组排序
- (NSArray<ObjectType> *)sortedArrayWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptrNS_AVAILABLE(10_6,4_0);

typedef NS_OPTIONS(NSUInteger, NSBinarySearchingOptions) {
NSBinarySearchingFirstEqual = (1UL <<8),
NSBinarySearchingLastEqual = (1UL <<9),
NSBinarySearchingInsertionIndex = (1UL <<10),
};

- (NSUInteger)indexOfObject:(ObjectType)obj inSortedRange:(NSRange)r options:(NSBinarySearchingOptions)opts usingComparator:(NSComparator)cmpNS_AVAILABLE(10_6,4_0);// binary search

@end

@interface NSArray<ObjectType> (NSArrayCreation)

+ (instancetype)array;//创建对象
+ (instancetype)arrayWithObject:(ObjectType)anObject;//通过一个元素创建数组对象
+ (instancetype)arrayWithObjects:(constObjectType [])objects count:(NSUInteger)cnt;//通过C数组创建数组对象
+ (instancetype)arrayWithObjects:(ObjectType)firstObj, ...NS_REQUIRES_NIL_TERMINATION;//通过一组元素创建数组对象
+ (instancetype)arrayWithArray:(NSArray<ObjectType> *)array;//通过另一个数组创建数组对象
- (instancetype)initWithObjects:(ObjectType)firstObj, ...NS_REQUIRES_NIL_TERMINATION;//初始化方法
- (instancetype)initWithArray:(NSArray<ObjectType> *)array;//初始化方法
- (instancetype)initWithArray:(NSArray<ObjectType> *)array copyItems:(BOOL)flag;//初始化方法
+ (nullableNSArray<ObjectType> *)arrayWithContentsOfFile:(NSString*)path;//通过文件创建数组
+ (nullableNSArray<ObjectType> *)arrayWithContentsOfURL:(NSURL*)url;//通过url创建数组
- (nullableNSArray<ObjectType> *)initWithContentsOfFile:(NSString*)path;//通过文件l创建数组
- (nullableNSArray<ObjectType> *)initWithContentsOfURL:(NSURL*)url;//通过url创建数组
@end

@interface NSArray<ObjectType> (NSDeprecated)

/* This method is unsafe because it could potentially cause buffer overruns. You should use -getObjects:range: instead.
*/

- (void)getObjects:(ObjectType__unsafe_unretained[])objects;//获取数组所有元素 需要传入分配了内存的C指针
@end

/**************** Mutable Array ****************/

@interface NSMutableArray<ObjectType> : NSArray<ObjectType>

- (void)addObject:(ObjectType)anObject;//添加元素
- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;//插入元素anObject到索引为index的位置上
- (void)removeLastObject;//删除数组中最后一个元素
- (void)removeObjectAtIndex:(NSUInteger)index;//移除数组中索引为index的元素
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(ObjectType)anObject;//将索引为index的元素替换为anObject对象
- (instancetype)initNS_DESIGNATED_INITIALIZER;//初始化
- (instancetype)initWithCapacity:(NSUInteger)numItemsNS_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder*)aDecoderNS_DESIGNATED_INITIALIZER;

@end

@interface NSMutableArray<ObjectType> (NSExtendedMutableArray)

- (void)addObjectsFromArray:(NSArray<ObjectType> *)otherArray;//通过数组来追加元素
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;//将索引为idx1的元素和索引为idx2的元素相互交换
- (void)removeAllObjects;//删除数组中所有元素
- (void)removeObject:(ObjectType)anObject inRange:(NSRange)range;//在一定范围内删除元素
- (void)removeObject:(ObjectType)anObject;//移除数组中和anObject一样的元素
- (void)removeObjectIdenticalTo:(ObjectType)anObject inRange:(NSRange)range;//删除指定范围内下标最小的某个元素
- (void)removeObjectIdenticalTo:(ObjectType)anObject;//删除某个元素 下标最小的
- (void)removeObjectsFromIndices:(NSUInteger*)indices numIndices:(NSUInteger)cntNS_DEPRECATED(10_0,10_6,2_0,4_0);//删除一定范围内的所有元素
- (void)removeObjectsInArray:(NSArray<ObjectType> *)otherArray;//通过数组删除元素
- (void)removeObjectsInRange:(NSRange)range;//通过范围删除元素
- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray<ObjectType> *)otherArray range:(NSRange)otherRange;//替换一组元素
- (void)replaceObjectsInRange:(NSRange)range withObjectsFromArray:(NSArray<ObjectType> *)otherArray;//替换一组元素
- (void)setArray:(NSArray<ObjectType> *)otherArray;//将数组内容替换为otherArray数组
- (void)sortUsingFunction:(NSInteger(*)(ObjectType,  ObjectType, void * __nullable))compare context:(nullablevoid*)context;//进行数组排序
- (void)sortUsingSelector:(SEL)comparator;//使用comparator比较方法进行排序
- (void)insertObjects:(NSArray<ObjectType> *)objects atIndexes:(NSIndexSet*)indexes;//插入一组元素
- (void)removeObjectsAtIndexes:(NSIndexSet*)indexes;//删除一组元素
- (void)replaceObjectsAtIndexes:(NSIndexSet*)indexes withObjects:(NSArray<ObjectType> *)objects;//替换一组元素
- (void)setObject:(ObjectType)obj atIndexedSubscript:(NSUInteger)idxNS_AVAILABLE(10_8,6_0);//设置某个下标对应的元素 子类覆写
- (void)sortUsingComparator:(NSComparator)cmptrNS_AVAILABLE(10_6,4_0);//进行数组排序
- (void)sortWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptrNS_AVAILABLE(10_6,4_0);//进行数组排序
@end

@interface NSMutableArray<ObjectType> (NSMutableArrayCreation)

+ (instancetype)arrayWithCapacity:(NSUInteger)numItems;//创建数组 numItems为元素个数
+ (nullableNSMutableArray<ObjectType> *)arrayWithContentsOfFile:(NSString*)path;//通过文件创建数组
+ (nullableNSMutableArray<ObjectType> *)arrayWithContentsOfURL:(NSURL*)url;//通过url创建数组
- (nullableNSMutableArray<ObjectType> *)initWithContentsOfFile:(NSString*)path;
- (nullableNSMutableArray<ObjectType> *)initWithContentsOfURL:(NSURL*)url;

@end

NS_ASSUME_NONNULL_END

iOS——NSArray相关推荐

  1. iOS NSArray 、NSMutableArray原理揭露

    在iOS开发中,我们在非常非常多的地方用到了数组.而关于数组,有很多需要注意和优化的细节,需要我们潜入到下面,去了解. 阅读<Effective Objective-C 2.0>的原版的时 ...

  2. iOS NSArray数组过滤

    需求:在一个数组里面,将在这个数组中的并且在另一个数组里面的元素过滤掉. 即:在一个数组dataArray里面,将在dataArray数组中的并且在filteredArray数组里面的元素过滤掉. / ...

  3. IOS NSArray 倒序

    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2",@"3" ...

  4. IOS NSArray,NSDictionary

    小结: NSArray有序的集合: NSDictionary无序的集合,可排序: 增删改查 ------NSArray----------- create : 1)NSArray *array = [ ...

  5. [iOS]NSArray:数组(NSArray)使用注意

    数组(NSArray)添加的元素必须为对象,如果是数字,则用NSNumber封装一下. 数组不能添加nil对象.

  6. html文本滚动到底后自动回到顶部,JS 实现DIV 滚动至顶部后固定

    JS 实现DIV 滚动至顶部后固定 DIV滚动至顶部后固定 Test Div function menuFixed(id) { var obj = document.getElementById(id ...

  7. iOS开发-NSArray

    忙了一上午,解决了几个bug,现在终于抽出来一点时间喝点水休息下, 想着系列这么浩大的一个工程,才刚刚开始写,不能断了,就跟写小说一样,既然是系列,那么就需要不停更... 好吧. 简单的说说iOS开发 ...

  8. 【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词

    一. 字符串 API 1. NSString 用法简介 (1) NSString API 介绍 NSString 功能 : -- 创建字符串 : 使用 init 开头的实例方法, 也可以使用 Stri ...

  9. iOS 深入解析之NSArray

    @interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecur ...

最新文章

  1. 时间罗盘html源代码_重磅!Vue 3.0源代码公布后,究竟有哪些变更?
  2. 【中继协助频谱切换】基于中继协助的频谱切换机制的MATLAB仿真
  3. 2021-02-28 LQG控制的主动悬架1/2车垂向动力学模型
  4. 【推荐活动】2015产品经理读书计划
  5. pythonoracle数据库操作_Python学习笔记4(操作oracle数据库)
  6. 4.windows和Linux下创建oracle用户名表空间,表,插入数据,用户管理表等操作
  7. 手把手教会你小程序登录鉴权
  8. Qt5中生成和使用静态库
  9. ios command
  10. 华为光伏usb适配器_华为系列原装充电器拆解第三弹:比亚迪版华为10W充电器
  11. jar包引用版本不一致引发的问题
  12. 《图书管理系统》—需求分析报告
  13. ABAQUS常用量纲
  14. css背景图铺满后图片变模糊的解决办法
  15. matlab如何把正弦转化为余弦公式,高中正弦和余弦公式定理,正余弦转化公式
  16. DOS命令:comp
  17. 短视频直播系统的功能
  18. 如何开发一个 WPS 加载项
  19. VBA多条EXCEL记录写入到WORD文档中
  20. 如何从一名“普通码农”成长为技术Leader?

热门文章

  1. 用计算机弹一首学猫叫的歌曲,抖音学猫叫简谱完整版
  2. qDebug输出QString
  3. BMS菊花链技术探讨
  4. C语言编程输入一个5位数以内的正整数,完成以下操作
  5. web3.eth详解
  6. 1、metasploit基础知识(笔记)
  7. 且行且珍惜,还在coder的人们
  8. 如何用木板做桥_恶梦惊魂下用木板铺桥后怎么做??? 爱问知识人
  9. dy创作者平台上传并发布视频
  10. 什么是公有IP地址?什么是私有IP地址?及各自范围介绍