星空网 > 软件开发 > 操作系统

OC中数组类NSArray的详解(一)

数组是一个有序的集合,OC中的数组只能存储对象类型, 但是对于对象的类型没有限制。

通过下标访问数组元素,下标从0开始。 





NSA􏰀􏰀a􏰁:不可变数组,即:对象创建好以后,数组中元素个数不能发⽣生变化。 

初始化⽅方法 

NSArray *names = [[NSArray alloc]initWithObjects:@"frank", @"duck", "monkey",nil];

注:nil作为数组存放元素的结束标志(nil在@"frank"后面时,代表数组中只有一个元素,虽然后面还有@"duck", "monkey"),多个元素通过逗号间隔。

便利构造器 

NSArray *names = [NSArrayarrayWithObjects:@"frank", @"duck", @"monkey",nil];

注:和初始化方法相同的注意点

字面量赋初值:使用“ @[] ”,“ [] ”中存入对应的对象,对象之间使用”,”相隔。比如: 





NSArray *names = @[@"frank", @"duck", @"monkey", @"cow"];


NSArray常用方法和属性

元素个数 :

@property (readonly) NSUInteger count;

获取数组中指定下标对应的元素
- (id)objectAtIndex:(NSUInteger)index;

字面量方式获取元素:数组对象[元素下标] 

names[0]

用来判断数组中是否包含某一个给定的对象




- (BOOL)containsObject:(id)anObject;

获取数组元素对应的索引 

- (NSUInteger)indexOfObject:(id)anObject;

将数组中的元素按照给定的字符串格式拼接成一个完整的字符串
OC中数组类NSArray的详解(一)images/loading.gif' data-original="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" />OC中数组类NSArray的详解(一)
// - (NSString *)componentsJoinedByString: (NSString *)separator;//例:有一个数组,通过&将所有元素拼接成一个字符串NSArray *array = @[@"北京", @"大连", @"河南", @"上海", @"广州", @"⻄安"];NSString *string = [array componentsJoinedByString:@"&"]; NSLog(@"%@", string);

View Code

注:NSString类相应的有componentsSeparatedByString:方法把字符串分离成数组。

 

数组类相关注意点:

1.数组中所有元素不能是基本数据类型,否则会编译报错,如果有需要封装成NSNumber类或NSValue类。

2.数组在NSLog中可以作为对象直接输出,此时建议重写NSObject的-(NSString *)description方法(下面会给出具体代码)

3.数组中可以存储自定义类的对象,此时建议重写NSObject的-(BOOL)isEqual:(id)object方法,原因在代码后面讲

OC中数组类NSArray的详解(一)OC中数组类NSArray的详解(一)
1 #import <Foundation/Foundation.h>2 3 @interface Father : NSObject4 5 @property NSString *name;6 @property NSInteger item;7 8 @end

Father类接口
OC中数组类NSArray的详解(一)OC中数组类NSArray的详解(一)
 1 @implementation Father 2  3 -(NSString *)description{ 4   return [NSString stringWithFormat:@"value = %ld",_item]; 5 } 6 -(BOOL)isEqual:(id)object{ 7   if(object == self) 8     return YES; 9   if (!object) {10     return NO;11   }12   if (![object isKindOfClass:[self class]]) {13     return NO;14   }15   16   return [self isEqualToFather:object];17 }18 19 - (BOOL)isEqualToFather:(Father *)aFather {20   if (self == aFather)21     return YES;22   if (!([self item] == [aFather item]))23     return NO;24   return YES; 25 }26 27 28 @end

Father类实现

 

OC中数组类NSArray的详解(一)OC中数组类NSArray的详解(一)
 1 int main(int argc, const char * argv[]) { 2   @autoreleasepool { 3     Father *f1 = [[Father alloc]init]; 4     f1.item = 10; 5     f1.name = @"name"; 6      7     Father *f2 = [[Father alloc]init]; 8     f2.item = 10; 9     f2.name = @"name";10     11     Father *f3 = [[Father alloc]init];12     f3.item = 10;13     f3.name = @"name";14     15     sun *s = [[sun alloc] init];16     s.item = 10;17     s.name = @"name";18     19     NSMutableArray *arr = [NSMutableArray arrayWithObjects:f1,f2,f1,@"test", nil];20     NSLog(@"%ld",[arr indexOfObject:s]);21     22     [arr removeObject:f3];23     NSLog(@"%@",arr);24     25   }26   return 0;27 }

main函数测试代码

大家可以自己看下测试结果

结论就是:1.自定义类在格式化字符串中会调用自己的description方法(其实系统类也是,系统类也是重写了这个方法,包括NSString类)。

             2.在indexOfObject和removeObject等需要判断两个对象是否相等的方法中,会调用继承自NSObject的isEqual方法(此方法建议重写)。

 

 下面会详细讨论下数组的排序

 

 

 

 

 

 

 

 

 

 

 

 

 









 

 

 

 

 

 

 





















 

 

 

 

 

 

 

 

 

 

 




















原标题:OC中数组类NSArray的详解(一)

关键词:array

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

东南亚电商新变局:Shopee提佣、TikTok增点、Lazada搞基建:https://www.goluckyvip.com/news/7559.html
英国将无协议脱欧?德国将取消英国EORI在德国清关?:https://www.goluckyvip.com/news/756.html
Shopify遇挫,年轻的东南亚电商市场不欢迎独立站?网:https://www.goluckyvip.com/news/7560.html
“Ozon合作伙伴物流”风雨兼程,助力中国卖家突破桎梏!:https://www.goluckyvip.com/news/7561.html
lazada开推广广告之前所需考虑的因素:https://www.goluckyvip.com/news/7562.html
东南亚电商,还是以现金为王吗?(下):https://www.goluckyvip.com/news/7563.html
TikTok,数据观察与竞品分析的关键 :https://www.xlkjsw.com/news/92276.html
沃尔玛崛起,会撼动亚马逊的地位吗?:https://www.kjdsnews.com/a/1842193.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流