OC-040.NSArray的遍历方式
2015-12-14 15:14
274 查看
遍历方式一般分为以下4种:
1.通过for循环
2.通过增强for
3.通过block封装代码
4.通过枚举器
让数组里面的对象都执行相同方法(类似for循环,但是效率要高于for):
1.[Objest makeObjectsPerformSelector:(nonnull SEL) ];
第一种方法是无参数的
2.[Objest makeObjectsPerformSelector:(nonnull SEL) withObject:(nullable id)]
让数组中的每个元素 都调用某个方法 并把withObject后边的对象做为参数传给方法SEL,如果是数据类型需要转乘NSNumber或者NSString
#import <Foundation/Foundation.h>//------main.m
#import "LSDog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
LSDog *dog1 = [[LSDog alloc] init];
dog1.name = @"dog1";
dog1.age = 1;
LSDog *dog2 = [[LSDog alloc] init];
dog2.name = @"dog2";
dog2.age = 2;
LSDog *dog3 = [[LSDog alloc] init];
dog3.name = @"dog3";
dog3.age = 3;
NSArray *dogs = @[dog1,dog2,dog3];
//1.for循环的方法遍历数组
long count = dogs.count;
for (int i = 0; i < count; i++) {
NSLog(@"%@",dogs[i]);
}
NSLog(@"__________________________________________________");
//2.增强for遍历(最常用,最简单)
for (LSDog *dog in dogs) {
NSLog(@"%@",dog);
}
NSLog(@"__________________________________________________");
//3.通过枚举器
NSEnumerator *enumdogs = [dogs objectEnumerator];
LSDog *dog4 = [[LSDog alloc] init];
while (dog4 = [enumdogs nextObject]) {
NSLog(@"%@",dog4);
}
NSLog(@"__________________________________________________");
//4.通过block数据类型
[dogs enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@",obj);
if (idx == 1) { //当索引==1的时候,就停止
*stop = YES;
}
}];
//5.如何让数组里面的对象都执行方法
//1.类似for循环,但是效率要高于for
[dogs makeObjectsPerformSelector:@selector(say)];
//2.让数组中的每个元素 都调用某个方法 并把withObject后边的对象做为参数传给方法sel
[dogs makeObjectsPerformSelector:@selector(show:) withObject:dog3];
}
return 0;
}
1.通过for循环
2.通过增强for
3.通过block封装代码
4.通过枚举器
让数组里面的对象都执行相同方法(类似for循环,但是效率要高于for):
1.[Objest makeObjectsPerformSelector:(nonnull SEL) ];
第一种方法是无参数的
2.[Objest makeObjectsPerformSelector:(nonnull SEL) withObject:(nullable id)]
让数组中的每个元素 都调用某个方法 并把withObject后边的对象做为参数传给方法SEL,如果是数据类型需要转乘NSNumber或者NSString
#import <Foundation/Foundation.h>//------main.m
#import "LSDog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
LSDog *dog1 = [[LSDog alloc] init];
dog1.name = @"dog1";
dog1.age = 1;
LSDog *dog2 = [[LSDog alloc] init];
dog2.name = @"dog2";
dog2.age = 2;
LSDog *dog3 = [[LSDog alloc] init];
dog3.name = @"dog3";
dog3.age = 3;
NSArray *dogs = @[dog1,dog2,dog3];
//1.for循环的方法遍历数组
long count = dogs.count;
for (int i = 0; i < count; i++) {
NSLog(@"%@",dogs[i]);
}
NSLog(@"__________________________________________________");
//2.增强for遍历(最常用,最简单)
for (LSDog *dog in dogs) {
NSLog(@"%@",dog);
}
NSLog(@"__________________________________________________");
//3.通过枚举器
NSEnumerator *enumdogs = [dogs objectEnumerator];
LSDog *dog4 = [[LSDog alloc] init];
while (dog4 = [enumdogs nextObject]) {
NSLog(@"%@",dog4);
}
NSLog(@"__________________________________________________");
//4.通过block数据类型
[dogs enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@",obj);
if (idx == 1) { //当索引==1的时候,就停止
*stop = YES;
}
}];
//5.如何让数组里面的对象都执行方法
//1.类似for循环,但是效率要高于for
[dogs makeObjectsPerformSelector:@selector(say)];
//2.让数组中的每个元素 都调用某个方法 并把withObject后边的对象做为参数传给方法sel
[dogs makeObjectsPerformSelector:@selector(show:) withObject:dog3];
}
return 0;
}
#import <Foundation/Foundation.h>//------LSDog.h @interface LSDog : NSObject @property(nonatomic,copy)NSString *name; @property(nonatomic,assign)int age; -(void) say; -(void) show:(LSDog *) dog; @end
#import "LSDog.h"//------LSDog.m @implementation LSDog -(NSString *)description{ return [NSString stringWithFormat:@"name = %@,age = %d",_name,_age]; } -(void) say{ NSLog(@"wang"); } -(void) show:(LSDog *) dog{ NSLog(@"name = %@",dog.name); } @end
相关文章推荐
- Javascript面向对象编程(二):构造函数的继承
- 使用Menu制作弹出菜单
- c++ 常见手误
- 查看 yum 命令安装的软件路径
- mui开发webapp(1)
- 杭电ACM5585
- GCC编译器中和ARM体系结构相关的选项讲义
- IntelliJ IDEA 15 与 Tomcat 配置
- Rxjava要素(一)
- c#(.net4.0)comboBox简单绑定
- 动态添加JS 事件
- 纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
- LeetCode 297 Serialize and Deserialize Binary Tree
- ios开发之实现提示框动画效果
- 用C表达面向对象语言的机制——C#版
- 退火算法求最小包围圆
- JavaScript 核心知识点总结-2
- git 常用使用命令
- 在soapClient上遇到的坑
- java直接内存与堆内存的比较