0
私はlibmysqlclientを使用しています。ここに私の宣言は、次のとおりです。割り当て管理のメモリ管理ルール
MYSQL *sql;
MYSQL *sqlPut;
MYSQL_RES *qResult;
@property(assign) MYSQL *sql;
@property(assign) MYSQL *sqlPut;
@property(assign) MYSQL_RES *qResult;
これは私がプロパティを割り当てるコードです:
MYSQL *newSql = mysql_init(NULL);
if (newSql == NULL) NSLog(@"MYSQL: Failed to initate connection");
my_bool reconnect = 1;
mysql_options(newSql, MYSQL_OPT_RECONNECT, &reconnect);
NSInteger connectionTimeout = 300;
mysql_options(newSql, MYSQL_OPT_CONNECT_TIMEOUT, (const void *)&connectionTimeout);
mysql_options(newSql, MYSQL_OPT_WRITE_TIMEOUT, (const void *)&connectionTimeout);
mysql_options(newSql, MYSQL_OPT_READ_TIMEOUT, (const void *)&connectionTimeout);
//mysql_options(newSql, CLIENT_INTERACTIVE, &reconnect);
NSNumberFormatter *portTransfer = [[NSNumberFormatter alloc] init];
newSql = mysql_real_connect(newSql, [[connection valueForKey:@"ip"] UTF8String] , [[connection valueForKey:@"login"] UTF8String], [[connection valueForKey:@"password"] UTF8String], [[connection valueForKey:@"database"] UTF8String], [[portTransfer numberFromString:[connection valueForKey:@"port"]] unsignedIntValue], NULL, 0);
if (newSql == NULL) { NSLog(@"MYSQL: Failed to connect database with error:%s\n for connection:%@",mysql_error(newSql),connection); return NO ;}
//else NSLog(@"MYSQL: Carrier:%@ connect database DONE",carrierName);
if ([[connection valueForKey:@"selectionDirections"] intValue] == 0) if (!self.sql) self.sql = newSql; else mysql_ping(self.sql);
else {
//NSInteger connectionTimeout = 10;
//mysql_options(newSql, MYSQL_OPT_CONNECT_TIMEOUT, (const void *)&connectionTimeout);
//self.sqlPut = newSql;
if (!self.sqlPut) self.sqlPut = newSql; else mysql_ping(self.sqlPut);
}
[portTransfer release];
クリーンアップへの正しい方法は、このプロパティは何ですか?私は自分のコードで見つけることができない漏れがあるので、コードのこの部分でそれが漏れるかもしれないと思っています。現在私は:
self.sql = nil;
self.sqlPut = nil;
self.qResult = nil;
'assign'ディレクティブでプロパティを解放する必要はなく、' copy'および 'retain'ディレクティブを持つプロパティだけを解放する必要があります。 –
このコードスニペットによってリークが発生していませんか? – lbrndnr
いいえ、私は分かりませんが、現在私はすべてをチェックしていましたが、同期が完了するまでアプリケーションはまだメモリが増えています – Alex