Ral*_*veo 1 objective-c objective-c-blocks
例:
typedef void(^responseBlock)(NSDictionary*, NSError *);
@interface MyClass : NSObject
{
[??] responseBlock responseHandler;
}
我应该在[??]括号中放置什么限定词?
我已经读过作为属性的块应该使用复制限定符设置...但是在这种情况下我不需要将块暴露为属性.我只是希望它仍然是一个ivar但我怎么能指定副本?而且,没有指定什么是使用的默认限定符?是__strong和其他一切一样吗?
我在ios5上使用ARC.
是的,块是ObjC中的对象,__strong适当的限定符也是如此.由于这是默认设置,您实际上可以将其关闭.
你没有办法指定在没有属性的情况下复制Block - 这将是你的责任(responseHandler = [someBlock copy];).您可以通过在.m文件中放置类扩展来声明一个仅对此类本身可见的属性(不可用于其他代码):
@interface MyClass ()
@property (copy) responseBlock responseHandler;
@end
Run Code Online (Sandbox Code Playgroud)
这(在合成时)将为您提供通常的访问方法,在您使用它们时将为您处理副本.
还要注意,在块中声明实例变量是可能的(现在推荐的过程)@implementation.听起来你希望这是一个私有属性(没有属性访问),并且在那里声明的ivars不能被任何其他代码看到.(当然,如果您正在使用房产,@synthesize则不需要这样做; 将为您创建ivar.)
@implementation MyClass
{
responseBlock responseHandler;
}
// Continue with implementation as usual
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |