2014-01-10 106 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]; 
}