iOS保留计数问题

时间:2014-01-10 11:36:42

标签: ios objective-c retaincount

这是我的代码的一部分:

NSMutableArray oldWordsArray;

newWordsArray= [self getNewWordArray];

-(NSMutableArray *) getOldWordArray{

    NSString *user_id = (NSString*)[tool readObkect:@"user_id"];

    NSMutableArray oldWords = [[NSMutableArray alloc]init];
    oldWords = [database getOldWord:user_id];
    NSLog(@"从所有词库中得到新单词");
    return oldWords;
}`

那么:我应该如何发布变量oldWordsArrayoldWords,非常感谢!

2 个答案:

答案 0 :(得分:1)

我猜,你没有使用ARC。这个:

-(NSMutableArray *) getOldWordArray{
    NSString *user_id = (NSString*)[tool readObkect:@"user_id"];

    NSMutableArray oldWords = [[NSMutableArray alloc]init];
    oldWords = [database getOldWord:user_id];
    NSLog(@"从所有词库中得到新单词");
    return oldWords;
}

可以翻译成:

-(NSArray *) getOldWordArray{
    NSString *user_id = (NSString*)[tool readObkect:@"user_id"];
    NSArray oldWords = [database getOldWord:user_id];
    NSLog(@"从所有词库中得到新单词");
    return oldWords;
}

然后:

- (NSArray *)oldWordArray
{
   NSString *user_id = (NSString*)[tool readObkect:@"user_id"];
   return [database getOldWord:user_id];
}

我不确定database是什么,但它应该返回一个autoreleased对象,所以在这种情况下你不必自己release。您也应该使用get中的前缀getOldWord。您也可以使用NSArray代替NSMutableArray

答案 1 :(得分:0)

这里有很多讨论  第一件事你应该检查如果启用了ARC,那么你不担心发布它将由ARC本身完成

如果没有,那么使用像这样的代码

-(NSMutableArray *) getOldWordArray{

    NSString *user_id = (NSString*)[tool readObkect:@"user_id"];

    NSMutableArray oldWords = [[[NSMutableArray alloc]init]autorelease];
    oldWords = [database getOldWord:user_id];
    NSLog(@"从所有词库中得到新单词");
    return oldWords ;
}

或者您可以使用

-(NSMutableArray *) getOldWordArray{

    NSString *user_id = (NSString*)[tool readObkect:@"user_id"];

    NSLog(@"从所有词库中得到新单词");
    return [database getOldWord:user_id];
}