Object-C代码练习【代码块】

本文详细介绍了Objective-C中的代码块(Block)用法,包括代码块的定义、使用、以及如何利用代码块进行数组排序等实际操作。此外还展示了如何通过typedef定义代码块类型,并提供了多个示例代码。
//
//  main.m
//  代码块
//
//  Created by on 14-10-10.
//  Copyright (c) 2014年 apple. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        int value = 6;
//        定义一个代码块, 注意大括号后面的分号
        int (^myBlockFirst)(int number) = ^(int number) {
            return value * number;
        };
//        使用代码块
        NSLog(@"%d", myBlockFirst(7));
        
        
//        使用代码块时通常不需要创建一个代码块变量,而是在代码中内联代码块中的内容。
//        通常,你会需要一个将代码块作为参数的方法或函数
        NSArray *array = [NSArray arrayWithObjects:@"Amir", @"Mishal", @"Irrum", @"Adam", nil];
        NSLog(@"Unsorted Array %@", array);
//        注意,这里的大括号后面没有分号
        NSArray *sortedArray = [array sortedArrayUsingComparator:^(NSString *object1, NSString *object2) {
            return [object1 compare:object2];
        }];
        
        NSLog(@"Sorted Array %@", sortedArray);
        
        
//        使用typedef定义代码块
        typedef double (^sumNumber)(double num1, double num2);
        sumNumber sumMethod = ^(double num1, double num2) {
            return num1 + num2;
        };
        
        NSLog(@"result is %.2f", sumMethod(3, 8));
        
        typedef int (^sumNumber1)(void);
//        如果这里不是静态变量,那么下面第二个输出语句依然输出200
//        即,a = 20和b = 50没有改变计算出的值
//        因为变量是本地的,即局部变量,代码块在定义时复制并保存他们的状态。所以,两次都输出200
//        如果将a和b改为static,即全局变量,那么
//        第二个就输出1000
        int a = 10, b = 20;
        sumNumber1 sumMethod1 = ^(void){
            return a * b;
        };
        NSLog(@"%d", sumMethod1());
        a = 20;
        b = 50;
        NSLog(@"%d", sumMethod1());
        
        
//        __block变量
//        本地变量会被代码块作为常量获取到。如果想要修改它们的值,必须将他们声明为__block变量
//        注意block前面是两个下划线,不是一个
        typedef int (^sumNumber3) (int num1, int num2);
        __block int c = 8;
        sumNumber3 sumMethod3 = ^(int num1, int num2){
            c = num1 + num2;
            return c;
        };
        NSLog(@"%d", sumMethod3(2, 9));
    }
    return 0;
}



转载于:https://my.oschina.net/are1OfBlog/blog/332797

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值