Имейте в виду, что я никогда не выполняю ARC, но приведение параметра строк к (__bridge_retained void *) должно помочь, если я правильно понимаю документ.
Вот код, который я использую для тестирования.
static int myCallback(void* ptr, int i, char** p1, char** p2) {
NSMutableArray* array = (__bridge_transfer NSMutableArray*)ptr;
return 0;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSMutableArray *rows = [[NSTestMutableArray alloc] init];
sqlite3_exec(NULL, "select distinct category from billy", &myCallback, (__bridge_retained CFMutableArrayRef)rows, NULL);
}
(__ bridge_transfer) - для передачи права собственности обратно, поэтому ARC освободит его правильно. Я перезаписываю dealloc моего NSTestMutableArray, чтобы показать, что он действительно освобожден, и он не будет освобожден, если я прокомментирую строку __bridge_transfer.