объект не выпускается в iphone - PullRequest
0 голосов
/ 28 мая 2010
 NSString *strSql = @"select tblrecentsearch_id,xmlrequest,company,postcode,city,kilometer,date from tblrecentsearch";

 returnValue = sqlite3_prepare_v2(database, [strSql UTF8String], -1, &selectStatement, NULL);
 if(returnValue == SQLITE_OK)
 {
  arrRecentSearch=[[NSMutableArray alloc] init];

  while(sqlite3_step(selectStatement)==SQLITE_ROW)
  {
   Search *ObjSearch = [[Search alloc]init];
   ObjSearch.intRecentSearchId = sqlite3_column_int(selectStatement, 0);
   ObjSearch.xmlRequest = [NSString stringWithCString:(char  *)sqlite3_column_text_check(selectStatement, 1) encoding:NSUTF8StringEncoding];
   ObjSearch.strCompnay=[NSString stringWithCString:(char  *)sqlite3_column_text_check(selectStatement, 2) encoding:NSUTF8StringEncoding];
   ObjSearch.strPostCode=[NSString stringWithCString:(char  *)sqlite3_column_text_check(selectStatement, 3) encoding:NSUTF8StringEncoding];
   ObjSearch.strPlace = [NSString stringWithCString:(char  *)sqlite3_column_text_check(selectStatement, 4) encoding:NSUTF8StringEncoding];
   ObjSearch.strKilometer = [NSString stringWithCString:(char  *)sqlite3_column_text_check(selectStatement, 5) encoding:NSUTF8StringEncoding];
   ObjSearch.strDate = [NSString stringWithCString:(char  *)sqlite3_column_text_check(selectStatement, 6) encoding:NSUTF8StringEncoding];

   [arrRecentSearch addObject:ObjSearch];

   [ObjSearch release];
  }
 }

 sqlite3_finalize(selectStatement);

Я хочу освободить arrRecentSearch, но он вернется из функции. Как я могу продать этот массив. Пожалуйста, помогите мне. Я получаю данные из базы данных.

1 Ответ

1 голос
/ 28 мая 2010

просто выпустить его автоматически:

return [arrRecentSearch autorelease];

Для получения дополнительной информации о том, как это работает

, ознакомьтесь с рекомендациями по управлению запиской apple

Если вы собираетесь вернуть автоматически освобожденный объект, вы должны помнить, чтобы сохранить его, если хотите сохранить его позже. т.е. если у нас есть функция, которая возвращает автоматически освобожденный массив

- (NSArray *) getSearchResults {
    return [[[NSArray alloc] init] autorelease];
}

и вы хотите запомнить результаты поиска на потом, вы должны не забыть сделать это:

...
NSArray *results = [[self getSearchResults] retain]; //!< Remember the retain here!
...

или вы можете использовать свойство для его хранения:

@property (nonatomic, copy) NSArray *searchResults;

...
self.searchResults = [self getSearchResults]; //!< The property handles the retain for you here
...

В любом случае, если вы просто оставите его как автоматически выпущенный, он исчезнет, ​​и вы получите исключение!

РЕДАКТИРОВАТЬ: Только что понял MustISignUp ответил на это в комментарии!

...