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

Block 代码快

时间:2016-06-15 16:02:28      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

1.原理

  1.1block类型  

     a.全局bock块   贯彻整个程序

     b.栈块  存在于栈内存中,作用域中使用

     c.堆块  自行管理其内存

     注*:http://blog.parse.com/learn/engineering/objective-c-blocks-quiz/   检验自己了解情况

  1.2定义

      类函数,闭包

      注*:1.block捕获块中出现的外部变量

               2.栈块copy之后会形成堆块

               3.__weak(ARC)或__block(MRC)来避免循环引用

               4.若想深入了解可使用C++理解(clang -rewrite-objc 源代码文件名)  

2.使用

     函数和block对比进行

     1.调用 

- (void)blockImp{
    
    //只有调用Block时候,才会执行其{}体内的代码
    [self block1];
}

- (void)block1{
    void (^mm)(int) = ^(int index){
        NSLog(@"block1 index = %d",index);
    };
    if (mm) {
        mm(23);
    }
}
- (void)functionUser{
    function1("Mr huang"); //简单函数调用
}
void function1(char * name){
    printf("Hello %s\n",name);
}

   2.形参

- (void)blockImp{
    
    [self block2:^(int index) {
        NSLog(@"block2 index = %d",index);
    }];
    
    //函数定义不能在 方法内部,而block可以。
    [self block2:printNumBlock];
}

- (void)block2:(void(^)(int))block{
    if (block) {
        block(24);
    }
}

void(^printNumBlock)(int) = ^(int num){
    NSLog(@"int number is %d",num);
};
int sayHello(int m){
    printf("sayHello %d\n",m);
    return m + 1;
}

- (void)functionUser{
    function2(sayHello); //函数作为参数掉用
}

    3.返回值

- (void)blockImp{
    [self block3](25);
}

- (void(^)(int))block3{
    return ^(int index){
        NSLog(@"block3 index = %d",index);
    };
}
int add(int a , int b){
    return a + b;
}

int sub(int a , int b){
    return  a - b;
}

void * function3(int i){
    if (i == 1) {
        return add;
    }else{
        return sub;
    }
}

- (void)functionUser{
    int (*m)(int, int)  = function3(2); //函数作为参数
    int ok = m(1,2);
    printf("ok %d\n",ok);
}

 

3.链式编程

    3.1.第三方链式 (Masory)

    3.2.自定义

#import <Foundation/Foundation.h>

@interface GLPerson : NSObject

 @property(nonatomic , assign)NSInteger age;

@property(nonatomic , copy)NSString * name;

- (GLPerson *((^)(NSString *)))setName;

- (GLPerson *((^)(NSInteger)))setAge;

@end
#import "GLPerson.h"

@implementation GLPerson

-(NSString *)description{
    return [NSString stringWithFormat:@"name = ‘%@‘;age = %ld",_name,_age];
}

- (GLPerson *((^)(NSString *)))setName{
    return ^(NSString * name){
        self.name = name;
        return self;
    };
}

- (GLPerson *((^)(NSInteger)))setAge{
    return ^(NSInteger age){
        self.age = age;
        return self;
    };
}

@end
    GLPerson *person = [[GLPerson alloc] init];
    person.setAge(12).setName(@"gulong");
    NSLog(@"%@",person);

Block 代码快

标签:

原文地址:http://www.cnblogs.com/gulong/p/5554191.html

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