sqlite запрос в iphone вызывает утечку - PullRequest
0 голосов
/ 20 ноября 2010

Я хотел бы знать, является ли причиной вызова LEAKS какой-либо вызов метода в следующем формате?

[userLookupWS initWithUsername:[NSString stringWithUTF8String:(char *)sqlite3_column_text(select_system, 2)] andPassword:[NSString stringWithUTF8String:(char *)sqlite3_column_text(select_system, 3)] andURL:[NSString stringWithFormat:@"%@%@", [NSString stringWithUTF8String:(char *)sqlite3_column_text(select_system, 0)], [NSString stringWithUTF8String:(char *)sqlite3_column_text(select_system, 1)]] andSSL:[NSString stringWithUTF8String:(char *)sqlite3_column_text(select_system, 4)]];

Как можно передать параметры этому методу, поскольку я получаю 100% памятиУтечка в этом утверждении!

С уважением, Accilies

Ответы [ 2 ]

1 голос
/ 20 ноября 2010

Почему вы отправляете initWithUsername: объекту, хранящемуся в переменной?Вы должны передавать результат alloc там напрямую (userLookupWS = [[SomeClass alloc] initWithUsername:…]) и никогда не переинициализировать существующий экземпляр.

Кроме того, что вы странный (он уже инициализирован! Почему вы инициализируете его снова??), почти все init… методы написаны в предположении, что они будут вызываться только один раз за экземпляр, поэтому отправка сообщения initWithWhatever: в уже инициализированный экземпляр приведет к утечке всего, что принадлежит этому экземпляру.

Нет хорошего способа исправить это, кроме как просто не делать этого в первую очередь.Не отправляйте init сообщения на уже инициализированный экземпляр.Самый простой способ избежать этого - отправить только сообщение init непосредственно на возвращаемое значение alloc ([[SomeClass alloc] init…]).

И, конечно, все, что alloc возвращает, вы должнырелиз.Самый простой способ убедиться, что это происходит, - это немедленно высвободить объект: [[[SomeClass alloc] init…] autorelease].

0 голосов
/ 20 ноября 2010

Имя метода initxxx предполагает, что возвращаемый объект является вашей обязанностью освободить, так что да, если вы не освободите этот объект, вы можете получить утечку памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...