gpt4 book ai didi

objective-c++ - 在 std::function 中存储 Objective-c block 是否安全?

转载 作者:行者123 更新时间:2023-12-01 05:57:19 26 4
gpt4 key购买 nike

我想将一个回调块从我的 objective-c ++ 代码传递给一个 C++ 对象。这非常简单,因为我可以将块分配给 std::function。在我的迷你示例中,一切正常,但我仍然不确定这样做是否安全。

#import "ViewController.h"
#include <functional>

std::function<void(void)> f;


@interface T : NSObject
@property (strong) NSString* value;
@end

@implementation T
- (void)dealloc {
NSLog(@"dealloc");
}
@end


@implementation ViewController


- (IBAction)storeBlock:(UIButton *)sender {
T* t = [[T alloc] init];
t.value = @"the captured obj";
f = ^void(void) { NSLog(@"This is the block with %@", t.value); };
}

- (IBAction)useBlock:(UIButton *)sender {
f();
}

- (IBAction)releaseBlock:(UIButton *)sender {
f = nullptr;
}


@end

我了解到块存储在堆栈中,如果我想在块创建范围之外使用它,我必须将它复制到堆中(我在我的示例中没有明确地这样做)。我也不确定 ARC 如何处理这种情况。是否允许“官方”这样做?我正在使用 Xcode 9.2。

最佳答案

当执行离开定义块的范围时,Objective-C 块将变为无效。为了避免这种情况,必须在块上使用复制方法,仅此而已。

关于objective-c++ - 在 std::function 中存储 Objective-c block 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48613973/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com