zoukankan      html  css  js  c++  java
  • iOS Block全面分析

    http://my.oschina.net/leejan97/blog/268536

    http://blog.csdn.net/enuola/article/details/8674063

    注意事项
    1.内联的block中内部定义的变量 自己本身有读写权限
     
    2.block内部要修改外部变量 需要将外部变量声明__block
     
    3.Block retain是无效的,要想保留block生命周期,可以通过copy来实现,记得release
     
    4.被block的应用的对象,retainCount会自动加一,为了打破这种 retain circle,可以在对象前加__block,这样block块就不会维护这个对象了
     
    下面的写法如果不加上_block a无法dealloc
     
    __block A  a =[ [[A alloc] init] withBlock:^{
     
     [a action];
     
     [ a release];
     
    }]; //这样A的dealloc方法就会调用
    @interface ViewController : UIViewViewController 
     {
            NSString *_string;
     }
     
     __block ViewController *controller = self;   
        _block = ^{
             NSLog(@"string %@",controller->_string);
        };
    5.在独立的block中不能引用self,如果需要访问可以使用参数传递的方法(可以把其考虑成c+中参数传入函数指针对应copy)**
     
    6.不要随便用.语法
     
    #import <UIKit/UIKit.h>   
    @interface AppDelegate : NSObject <UIApplicationDelegate>
    @property (nonatomic, strong) NSString *stringProperty;  
    @end
    #import "GCDAppDelegate.h" 
    @implementation AppDelegate 
    @synthesize stringProperty;  
    - (void) BlockTestError{
    HelloBlock myBlock= ^(void){
    self.stringProperty = @"Block Objects"; 
    NSLog(@"String property = %@", self.stringProperty);//运行错误
    };
    myBlock();
    }}  
     
    - (void) BlockTestCorrect{
    HelloBlock myBlock= ^(void){
    [self setStringProperty:@"Block Objects"];
       NSLog(@"self.stringProperty = %@", [self stringProperty]); //运行ok
    };
    myBlock();
    }}  
    @end
     
  • 相关阅读:
    float及清除浮动
    HTML meta标签总结与属性使用介绍
    jQuery相关知识
    FullCalendar日程设置
    Python基础知识
    波段选择
    CSS基础知识
    稀疏表示的高光谱分类
    Sass基本特性
    [Sass]混合宏
  • 原文地址:https://www.cnblogs.com/woaixixi/p/5012301.html
Copyright © 2011-2022 走看看