简体   繁体   English

对象没有在iPhone中释放

[英]object not getting released in iphone

 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);

I want release arrRecentSearch but it will return from function . 我想要释放arrRecentSearch,但它将从function返回。 How can i realese this array. 我怎样才能实现这个数组。 Please help me.I am fetching data from databse. 请帮帮我。我正在从数据库中获取数据。

just autorelease it : 只是自动释放它:

return [arrRecentSearch autorelease];

Have a look at the apple memopry management guidelines for more information on how this works 看看苹果备忘录管理指南 ,以了解有关其工作原理的更多信息。

If you are going to return an autoreleased object, you must remember to retain it if you wnat to keep it around later. 如果要返回自动释放的对象,则必须记住要保留该对象,以备日后保留。 ie if we have a function that returns an autoreleased array 即如果我们有一个函数返回一个自动释放的数组

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

and you want to remember the search results for later you must remember to do this : 并且您想记住搜索结果,以便以后使用时必须记住:

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

or, you might use a property to store it : 或者,您可以使用属性来存储它:

@property (nonatomic, copy) NSArray *searchResults;

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

Either way, if you just leave it as autoreleased, it's going to vanish and you're going to get an exception! 无论哪种方式,如果您只是将其保留为自动发布,它将消失,并且您将获得异常!

EDIT: Just realised MustISignUp has answered this in a comment! 编辑:刚意识到MustISignUp已在评论中回答了这个问题!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM