2014-01-10 66 views
-2

这是我的代码部分:的iOS保留计数问题

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,非常感谢!

+0

必须使用ARC,而不是手动释放的对象。 – suhit

+0

就这么你知道'IOS'(http://en.wikipedia.org/wiki/Cisco_IOS)与'iOS'(http://en.wikipedia.org/wiki/IOS)编辑你的标题是不一样的。 – Popeye

+0

'你必须使用ARC,而不是手动释放对象。“你实际上没有。你可以使用其中一个。 – Peres

回答

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。您也应该使用getOldWord中的前缀get。您也可以使用NSArray而不是NSMutableArray

+0

非常感谢,它的作品! –

0

这么多的讨论,在这里对此 首先你应该检查是否启用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]; 
}