您的位置:首页 > 其它

__block typeof的说明

2013-12-12 13:48 267 查看
1. block不是Object对象,所以对retain无效,要想保留block生命周期,最好通过copy来实现,当然copy后,要记得release。

2.一般被block的应用的对象,retainCount会自动加1,为了解决这种 retain的内存问题,可以在对象前加__block,如果不加会导致内存泄漏,导致程序直接崩溃。加了block块就不会维护这个对象了。

对临时变量的引用:

__block Object obj = [[[Object alloc] init] withBlock:^{

[obj blockRetain];

[obj release];

}]; 这样Object的dealloc方法就会调用。

对实例变量的引用:

Object obj =[[[Object alloc] init] withBlock:^{

[self blockRetain];

}];

这样即使调用的self自身类的release方法,只要这个block没有执行完,self也不会释放。可采用如下做法

__block typeof (self) bself = self; 即通过表达式引用,指明 bself 是self类型。

Object obj =[[[Object alloc] init] withBlock:^{

[bself blockRetain];

}];

这样块和self相互独立了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: