2 xinyoulingxi1 tong xinyoulingxi1_tong 于 2012.11.30 14:30 提问

在一个类中block问题

在类中定义一个property,作为block用

@property (nonatomic, strong) void (^ myBlock)();

然后想在property在代码中使用时为block创建了一个获取,如果property是NSArray,就可以这样设置:

@synthesize myProperty = _myProperty;

- (NSArray *)myProperty {

    if (_myProperty) {
        _myProperty = [[NSArray alloc] init];
    }

    return _myProperty;
}

但是property是block,应该怎么设置实例化?

2个回答

g989_1314125
g989_1314125   2012.11.30 15:06
已采纳

在h文件

typedef BOOL (^MyProcessorBlock)(id param1);

@property (nonatomic, copy) MyProcessorBlock myBlockProperty

在m文件

@synthesize myBlockProperty = _myBlockProperty;

其他情况在m文件中

- (MyBlock)myBlockProperty {
    if(!_myBlockProperty) {
        _myBlockProperty = ^(self) { ..... };
    }
    return _myBlockProperty;
}
Mr_me
Mr_me   2012.11.30 15:11
@property (nonatomic, copy) void (^ myBlock)();

- (void (^)())myBlock {
    if (!_myBlock) {
        self.myBlock = ^ () {
            NSLog(@"Do something");
        };
    }
    return _myBlock;
}
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
NSTimer中的循环引用
- (void)viewDidLoad { [super viewDidLoad]; _timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self
Java中类的初始化块问题(一)
Java中类进行初始化的地方有两个,一个是构造函数,另一个就是初始化块。而初始化块分为静态初始化块和非静态初始化块,它们都在构造函数之前执行,但是二者略有不同,静态初始化块是在类被加载到内存就开始执行,而非静态初始化块是在创建对象时,构造之前被执行。由以下两个例子即可看出。
iOS中Block使用注意点及常见问题浅析
本文将浅分析几个Block使用问题: - 问题一:Block作为类变量属性时为啥用copy修饰?堆栈存储位置是怎样的? - 问题二:为什么需要__block 修饰自动变量后,才能在Block中更改? - 问题三:关于常见block中self的循环引用问题,可以用__weak打破强引用链;那么为什么AFN或像UIView动画不需要弱引用self?
table中tr的display:block显示布局错乱问题
table中tr的display:block显示布局错乱问题
使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?
系统的某些block api中,UIView的block版本写动画时不需要考虑,但也有一些api 需要考虑: 所谓“引用循环”是指双向的强引用,所以那些“单向的强引用”(block 强引用 self )没有问题,比如这些: [UIViewanimateWithDuration:durationanimations:^{ [self.superviewlayoutIfNeeded]; }];
ios开发中block使用小结
一、block基本使用   声明:返回值(^block变量名)(参数)   定义 :三种形式   二、block保存一段代码       在某处在block内声明一段代码,在另一处调用 三、block传值      正向传值:被传值者声明属性来接收值      逆向传值:代理方法,委托方内声明协议                     block逆向传值方法,传
block循环引用的理解和self.navigationController的理解
今天写代码的时候,发现同事写的代码有些难以理解,向同事询问的时候才发现原来现在的demo是他以前做的,出了一点小问题。 像这样的新手代码,由于不理解block,self.channelListViewModel引用这block,block会对其内部的变量全部retain一次,所以block也持有self,这样一来就会导致循环引用了,所以代码不能如此写。         block是比较难写
关于block中调用外部基本数据类型变量问题
bock中调用外部基本数据类型变量
iOS: ARC和非ARC下使用Block属性的问题
目录 1. Block的声明和调用 2. 循环引用问题   返回目录 1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非ARC下返回Block)。 另一个需要注意的问题是关于线程安全,在声明Block属性时需要确
为什么系统的block,AFN网络请求的block内使用self不会造成循环引用?
其实只要抓住循环引用的本质。所谓循环引用,是因为当前控制器在引用着block,而block又引用着self即当前控制器,这样就造成了循环引用。 通用情况 :   在block本身不被self持有,而被别的对象持有,同时不产生循环引用的时候,就不需要使用weakself了. 关于这个问题,UIView和AFN还是不一样的。 首先循环引用发生的条件就是