0

私のiPhoneアプリにSQLITE DATABASEを使用しています

データベースのコンテンツを再試行するデータベース内のアプリで、配列を使用し、select ステートメントのデータベース メソッドでこの配列を返します。

この目的のために、配列を割り当て、配列を解放する必要があります。

NSMutableArray *allContacts = [[NSMutableArray alloc] init];
 return allContacts;

returnステートメントで使用した配列を解放した場合

返却後に解除しようとしたらその逆(返却後は何でもできます)

解決策をお願いします....

自動リリース NSMutable 配列の使用方法

//Select statement for contacts
//==================================
+ (NSMutableArray*) selectAllContactsFromDB
{
      NSString *DBPath = [self copyDBFile];
      sqlite3 *contactsDB = nil;
      sqlite3_stmt *statement = nil;
      NSMutableArray *allContacts = [[NSMutableArray alloc] init];

      if (sqlite3_open([DBPath UTF8String], &contactsDB) == SQLITE_OK)
      {
            NSString *query = [NSString stringWithFormat: @"SELECT ROWID, NAME, MOBILE,  FROM CONTACTINFO"];
            if(sqlite3_prepare_v2(contactsDB, [query UTF8String], -1, &statement, NULL) == SQLITE_OK)
            {
                  while (sqlite3_step(statement) == SQLITE_ROW)
                  {
                        Contact *contact = [[Contact alloc] init];
                        contact.rowid = sqlite3_column_int(statement, 0);
                        contact.name = [NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 1)];
                        contact.mobile = [NSString stringWithUTF8String:(const char*) sqlite3_column_text(statement, 2)];


                        [allContacts addObject:contact];
                  }
            }
            else {
                  NSLog(@"Statement not prepared");
            }
      }
      [DBPath release];
      return allContacts;
}
4

5 に答える 5

3

メソッドから割り当てられたオブジェクトを返すときは、それをautoreleasedオブジェクトとして渡します。

return [allContacts autorelease];

オブジェクトを取得したら、さらに使用するautoreleased必要があります。retain

したがって、呼び出し方法を次のように変更します。

NSMutableArray *temp = [[YourClass selectAllContactsFromDB] retain];
于 2012-11-30T09:34:52.880 に答える
1

このようにしてみてください

NSMutableArray *allContacts = [[[NSMutableArray alloc] init] autorelease];

そしてまたこのように..

return [allContacts autorelease];
于 2012-11-30T09:33:07.277 に答える
1

returnステートメントを書く return [allContacts autorelease]; か、プロジェクトで使用できARCます。

于 2012-11-30T09:35:21.647 に答える
1

使用する必要がありますautorelease

return [allContacts autorelease];

このようにして、自動解放プールが次にフラッシュされるときに il が解放されます。そして、あなたは黄金律に従いました: それぞれallocの , copyorにはorretainがなければなりません.releaseautorelease

于 2012-11-30T09:36:17.477 に答える
1

ARC(自動参照カウント)を使用するか、可変配列としてプロパティを持ち、配列を返すだけです...

ARC を始めるには、こちらをご覧ください: http://www.youtube.com/watch?v=FxuI4e_Bj58

于 2012-11-30T09:35:55.667 に答える