iphone - 在实例变量中保存 block

标签 iphone objective-c ios cocoa-touch objective-c-blocks

我们如何声明一个全局(私有(private)实例变量)来接受其中的一个 block 。我们是否需要综合它以及它对内存管理的影响是什么。

我有一个从第三方方法收到的 block ,我想将其保存在实例变量中并在以后使用它。

最佳答案

这是在后台完成一些工作后存储用于完成回调的 block 的(无 ARC)示例:

worker .h:

@interface Worker : NSObject
{
    void (^completion)(void);
}
@property(nonatomic,copy) void (^completion)(void);
- (void)workInBackground;
@end

worker .m:

@implementation Worker
@synthesize completion;

- (void)dealloc
{
    Block_release(completion);

    [super dealloc];
}

- (void)setCompletion:(void (^)(void))block
{
    if ( completion != NULL )
        Block_release(completion);

    completion = Block_copy(block);
}

- (void)workInBackground
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)
    {
        // Do work..

        dispatch_async(dispatch_get_main_queue(), completion);
    });
}

@end

关于iphone - 在实例变量中保存 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10343526/

相关文章:

ios - 如何在XMPP中获取选定用户的聊天记录

ios - 启动应用程序时如何克服此错误?

iphone - 如果我想在 iPhone 上的 Facebook 中发布视频,需要更改此代码中的哪些内容?

ios - AVaudioPlayer 不工作,mp3 位于编译包中

objective-c - 从 Objective-C 调用 C 函数会丢失传入的值

iphone - 在 iphone 中预览圆形图像

ios - Swift:Web 服务 API 调用在某些网络上返回错误

android - 视频兼容性问题 : android recorded video not played in iphone

iphone - 连续绘制 iPhone 位图对象?我缺少什么?

ios - 重载单一平等在Swift中