[C++]记录使用Lambda遇到的坑

257 阅读1分钟

Lambda格式:

[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}

第一个坑: 这里的函数对象参数如果是OC对象的话要注意保证这个OC对象不要被释放, 如果Lambda里面使用了的释放的OC对象, 那么很有可能会crash.

一个简单的代码:

- (void) testLambda {

    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"1", @"2",  nil];
    auto func = [arr] ()
    {
        NSLog(@"11111 %@", [arr objectAtIndex:1]);
    };
    
    [arr release];
    func();
}

在NSLog那行会crash.