2010-05-28 54 views
0
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,但它會從函數返回。我怎樣才能放棄這個數組。請幫助我。我從數據庫中提取數據。對象未在iphone中發佈

+1

return [arrRecentSearch autorelease]; – hooleyhoop 2010-05-28 09:55:52

回答

1

只是自動釋放它:

return [arrRecentSearch autorelease]; 

看一看的apple memopry management guidelines的詳細信息,這是如何工作

如果你要返回一個自動釋放的對象,你必須記住,如果你把它保留下來以後再保留它。也就是說,如果我們有一個返回一個autoreleased數組

- (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在評論中回答了這個問題!

+0

謝謝,但它產生未捕獲的異常 – user344799 2010-05-28 10:28:03

+1

什麼是例外?獲取arrRecentSearch的方法是否記住保留它? – deanWombourne 2010-05-28 11:14:25

+0

autorelease是返回對象的正確方法,但調用者必須將其放在某處保留它,否則它將在下次autorelease池被耗盡時釋放。 – progrmr 2010-05-28 13:02:31