ios开发--block应该知道的那几件事
来源:未知 责任编辑:责任编辑 发表时间:2015-09-16 20:03 点击:次
block 现在已经基本上已经使用非常普遍了,在使用用中也又很多坑,下面把block开发中应该知道的那几件事总结下.
p>
p>:内联(inline)Block
p>内联block 说白了就是block被嵌入到一个函数中
p>例如:
p>typedef void (^HelloBlock)(void);
p>
p>- (void) BlockTest{
p>HelloBlock myBlock= ^(void){
p>NSLog(@"Hello Block");
p>};
p>myBlock();
p>}
p>注意事项
p>1.内联的block中内部定义的变量 自己本身有读写权限
p>
p>2.block内部要修改外部变量 需要将外部变量声明__block
p>
p>3.Block retain是无效的,要想保留block生命周期,可以通过copy来实现,记得release
p>
p>4.被block的应用的对象,retainCount会自动加一,为了打破这种 retain circle,可以在对象前加__block,这样block块就不会维护这个对象了
p>
p>下面的写法如果不加上_block a无法dealloc
p>
p>__block A a =[ [[A alloc] init] withBlock:^{
p>
p> [a action];
p>
p> [ a release];
p>
p>}]; //这样A的dealloc方法就会调用
p>@interface ViewController : UIViewViewController
p> {
p> NSString *_string;
p> }
p>
p> __block ViewController *controller = self;
p> _block = ^{
p> NSLog(@"string %@",controller->_string);
p> };
p>5.在独立的block中不能引用self,如果需要访问可以使用参数传递的方法(可以把其考虑成c+中参数传入函数指针对应copy)**
p>
p>6.不要随便用.语法
p>
p>#import <UIKit/UIKit.h>
p>@interface AppDelegate : NSObject <UIApplicationDelegate>
p>@property (nonatomic, strong) NSString *stringProperty;
p>@end
p>#import "GCDAppDelegate.h"
p>@implementation AppDelegate
p>@synthesize stringProperty;
p>- (void) BlockTestError{
p>HelloBlock myBlock= ^(void){
p>self.stringProperty = @"Block Objects";
p>NSLog(@"String property = %@", self.stringProperty);//运行错误
p>};
p>myBlock();
p>}}
p>
p>- (void) BlockTestCorrect{
p>HelloBlock myBlock= ^(void){
p>[self setStringProperty:@"Block Objects"];
p> NSLog(@"self.stringProperty = %@", [self stringProperty]); //运行ok
p>};
p>myBlock();
p>}}
p>@end
p>
p>
p>另外 本人打算十一后离职换份工作,哪位仁兄公司有意向 站内信联系,帮忙内推下哈.
p>
p>再打下广告哈 我搭建的个人博客 也已经上线了 引用的是hexo , 地址是hufeng825.github.com ui配色再微调中,对ie10 以下支持不太好 建议用chrome Firefox 或者safrari 浏览 另外也已经对移动设备做了响应是布局.
p>
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>