码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-30 19:56:12      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:

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

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

标签:

原文地址:http://www.cnblogs.com/as5346/p/4469611.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!