关于使用block中心得

1,若你自己的很不习惯它的声明方式,你完全可以自己加个  

typedef void(^ChangeColorBlockT) (NSString *name);

接着你就和创建对象一样的方法声明一个block.

ChangeColorBlockT _theBlcok;

//.h

- (id)initwithBlock:(ChangeColorBlockT)cb;

//.m

- (id)initwithBlock:(ChangeColorBlockT)cb{

    self = [super init];

    if (self) {

        _theBlcok= [cb copy];

    }

    return self;

}

-(void)dealloc{

[_theBlock release];

[super dealloc];

}



//Block的内存默认分配在栈上面,是由编译器来进行管理,而我们想要程序员自己来管理,也就是让栈——>堆。


//在某个控制器初始化一个block

//vc1.m

ViewController2 *vc2 = [[ViewController2 alloc] initwithBlock:^(NSString *name) {

        NSLog(@"your name is %@",name);

    }];

    [self.navigationController pushViewController:vc2 animated:YES];

    [vc2 release];


//vc2.m

- (IBAction)passValue:(id)sender {

    

    NSLog(@"************");

    if (_theBlcok) {

        _theBlcok(@"myName");

    }

}

//当vc2中对这个block传递值的时候,这个块就开始工作,这样的好处是什么呢?

a,我想最大的好处就是不用写传统意义上的delegate方式传值了。

b,代码简介了,让你一眼就知道这个block是干嘛的,不用像以往去查api的delegate方法了。

c,gcd的与block的配合使用。


//还有一点值得提及的是,若在块中要用到self.xxx的时候最好不要这么干,用Class *subclass = self;然后再在块中引用;好处避免不知道对象所有权和引用计数规律的时候漏掉了释放本该释放的。以及一个使用频率最高的__block 关键字的使用。

若在block使用中出现了循环引用,最好拿出笔来画画……分析哪个指向可以打破。再没有熟练使用arc的时候,最好还是使用手动的内存管理,通过合理运用内存管理的黄金法则让你更通透的掌握oc和iphone开发。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值