我得到這個錯誤,當我嘗試用下面的SQLite的代碼來做到這一點使用ARC:Objective-C的指針「無效*」的隱式轉換是不允許與ARC - sqlite3的
NSMutableArray *rows = [[NSMutableArray alloc] init];
sqlite3_exec(database, "select distinct category from billy", callback, rows, NULL);
任何人都知道如何解決這個問題?
我得到這個錯誤,當我嘗試用下面的SQLite的代碼來做到這一點使用ARC:Objective-C的指針「無效*」的隱式轉換是不允許與ARC - sqlite3的
NSMutableArray *rows = [[NSMutableArray alloc] init];
sqlite3_exec(database, "select distinct category from billy", callback, rows, NULL);
任何人都知道如何解決這個問題?
被警告我永遠不會做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將正確釋放它。我重寫了我的NSTestMutableArray的dealloc以表明它真的被釋放,並且如果我評論__bridge_transfer行,它將不會被釋放。
這給我一個行上的潛在泄漏警告。如果我將__bridge_transfer和__bridge_retained都更改爲__bridge,則代碼有效,並且不會收到警告。 – TompaLompa
你能提供你的回調函數的代碼嗎?這可能會影響到答案。 –