OC 学习第六天(敲代码时遇到的一些错误)

1.如何定义block

等号左边是声明  等号右边是实现。

声明部分:先写返回值类型 然后(Block)然后(参数名);一定要括号括起来

实现部分: ^托字符  返回值类型

2.block 如何应用  :数组排序

 应该注意的问题:

1 进行比较的时候用的是“对象”

比如:

Student *stu1 = [[Student alloc]initWithName:@"wangbadan" withSex:@"nan" withAge:13 withScore:77 withNumber:3];

NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3 ,nil ];

 注意这里用的时stu1(对象)     而不是@"stu1"

 

2 进行不改变的比较时,是有返回值类型的

array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)

如果写成这样是错误的:

[array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)

 因为sortedArrayUsingComparator的返回值类型是一个数组,所以必须用一个数组来接收它。从输出的结果来看没有进行任何排序

3 思考(for in)循环输出

4 做项目时候会用到的:

  //block是使用C语言里面结构体实现的(放在做项目的时候可以去研究)

    NSInteger __block  count = 0;(block前面加两个横杠)

//    NSInteger count = 0;

    

    NSInteger (^stringBlock)(NSString *)= ^NSInteger(NSString *string){

        NSInteger number = [string integerValue];

       count++;//block内部拷贝过程,把一个局部变量拷贝过来当做常量来使用(这个写法是改变了block,如果不在上面添加NSInteger __block  count = 0;来实现的,如果不添加就是错误的。)

        countNumber = countNumber-5;

        //    全局变量可以在block内部进行使用,也可以进行修改

        number =number +count+countNumber;

        return number;

    };

    

    

    NSInteger result= stringBlock(@"3");

    NSLog(@"%lu",result);

    

    

//    如果想改变block的局部变量,在它的上面写上__block

posted @ 2015-04-30 18:30  5436  阅读(136)  评论(0编辑  收藏  举报